&def;' def' def并且没有' def'

时间:2016-02-25 11:48:22

标签: function gradle groovy

我是一个时髦的初学者。 我很困惑,是否' def'使用。

def str = "hello"
print str

VS

str = "hello"
print str

从这个例子。结果是一样的。但我想知道它们是不同的。 还有其他情况有所不同吗?

1 个答案:

答案 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,在这种情况下,我与ab的范围相同。我能够打印它们的价值。

接下来我打电话给闭包。两个闭包都检查局部范围,如果在那里找不到变量,则检查bindings。区别在于:a可以访问,而b - 不是。