SORU
8 EKİM 2008, ÇARŞAMBA


' "amaç def" "x = 0" def;?Groovy:

Aşağıdaki parça kodu (Groovy User Guide alınan), neden önek kelime ile atamadef?

def x = 0
def y = 5

while ( y-- > 0 ) {
    println ""   x   " "   y
    x  
}

assert x == 5

Def anahtar sözcüğü kaldırılabilir, ve bu parçacık aynı sonuçları üretecektir. Anahtar üzerindeki etkisidef?

CEVAP
9 EKİM 2008, PERŞEMBE


Temel komut için sözdizimsel şeker. Atlama "def" sözcüğünü geçerli komut bağlamaları değişken koyar ve bunun moda (çoğunlukla) genel kapsamlı bir değişken gibi davranır:

x = 1
assert x == 1
assert this.binding.getVariable("x") == 1

Bunun yerine def anahtar sözcüğü kullanarak bağlamaları: komut değişken koymaz

def y = 2

assert y == 2

try {
    this.binding.getVariable("y") 
} catch (groovy.lang.MissingPropertyException e) {
    println "error caught"
}

Parmak izi: "" . hata yakaladı

Büyük programlarda def anahtar sözcüğü kullanarak, değişken bulunabilir kapsamını tanımlamak yardımcı olur ve sarma korumak yardımcı olabilir önemlidir.

Eğer komut bir yöntem tanımlarsanız, "" ana senaryonun vücut olarak kapsamında değildir: . def ile oluşturulan değişkenlere erişim olmaz

 x = 1
 def y = 2


public bar() {
    assert x == 1

    try {
        assert y == 2
    } catch (groovy.lang.MissingPropertyException e) {
        println "error caught"
    }
}

bar()

"" . hata yakaladı yazdırır

"Y" değişken kapsamda değil içinde çalışır. "groovy x değişkeni için geçerli bir komut bağlantıları kontrol eder gibi" kapsamında değildir. Daha önce de söylediğim gibi, bu sadece hızlı ve kirli bir komut (genellikle bir gömlekleri) yazın daha hızlı yapmak için bir sözdizimsel şekerdir.

Her zaman kullanmak için daha büyük komut iyi uygulama "def tuhaf ölçüm sorunları çalıştırmak veya istemediğiniz değişkenleri ile sen karışma" sözcüğü.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Shanice Caruthers

    Shanice Caru

    27 EKİM 2011
  • RaverX DouBle StAg XI

    RaverX DouBl

    23 Mayıs 2008
  • UlyssesForever's channel

    UlyssesForev

    28 ŞUBAT 2012