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

  • LearnCode.academy

    LearnCode.ac

    20 Aralık 2012
  • UberFacts

    UberFacts

    26 EKİM 2013
  • VOICE TV

    VOICE TV

    2 Aralık 2010