2016-02-25 4 views
1

Я начинающий новичок. Я смущен, что используется «def».Разница между 'def' и no 'def'

def str = "hello" 
print str 

против

str = "hello" 
print str 

Из этого примера. результат такой же. Но интересно, разные ли они. И существуют ли другие ситуации?

ответ

2

Второй пример действителен только в том случае, если вы работаете со сценариями. См. 3.2 Script class here.

Без переменной def хранится в привязке скрипта и работает как глобальная переменная в этом скрипте.

Если вы определяете переменную с def, она будет локальной переменной метода run скрипта и будет следовать всем правилам локальной переменной. Эта разница не имеет большого значения, если вы работаете с одним скриптом.

Различие можно проиллюстрировать следующим фрагментом:

def closureA = { println(a) } 
def closureB = { println(b) } 

a = "I'm global" 
def b = "I'm local" 

println(a) // prints "I'm global" 
println(b) // prints "I'm local" 

closureA() // prints "I'm global" 
closureB() // throws groovy.lang.MissingPropertyException: No such property: b 

Здесь я сначала объявить 2 затворов (анонимные функции). Обратите внимание, что во время объявления не объявляется ни a, ни b, и поэтому недоступны для закрытия. Все нормально.

Затем я вызываю println непосредственно после объявления, и в этом случае я в той же области с a и b. Я могу напечатать их ценность.

Далее я вызываю замыкания. Оба закрытия проверяют локальную область, и если переменная там не найдена, они проверяют bindings. И вот разница: a доступен, а b - нет.

+0

Чайка, спасибо! –

Смежные вопросы