我是一个时髦的初学者。 我很困惑,是否' def'使用。
def str = "hello"
print str
VS
str = "hello"
print str
从这个例子。结果是一样的。但我想知道它们是不同的。 还有其他情况有所不同吗?
答案 0 :(得分:2)
第二个示例仅在您使用脚本时才有效。请参阅3.2 Script class here。
没有def变量存储在Script的绑定中,并作为该脚本中的“全局”变量。
如果使用def
定义变量,它将是Script的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
- 不是。