在 groovy 的 repl (groovysh) 中使用 def 的奇怪行为
Strange behavior using def in groovy's repl (groovysh)
问题总结
今天早上我使用 groovysh 来测试闭包,但在这样做的过程中我遇到了意想不到的行为,我在中定义了一个 class groovysh 然后从 class 实例化一个对象如下
groovy:000> class Student {
groovy:001> def firstName
groovy:002> def lastName
groovy:003> }
===> true
groovy:000> def chris = new Student()
===> Student@52d239ba
然后我尝试使用隐式 setter 方法设置 firstName 属性,如下所示:
groovy:000> chris.setFirstName("chris")
并收到以下错误
Unknown property: chris
然后我尝试在没有 def
成功执行的情况下实例化一个新对象
groovy:000> jen = new Student()
===> Student@c1bd0be
groovy:000> jen.setFirstName("Jenifer")
===> null
不明白为什么会这样然后我创建了一个可执行 groovy 文件(如下所示)
class Student {
def firstName
def lastName
}
def chris = new Student()
chris.setFirstName("Christopher")
println chris
john = new Student()
john.setFirstName("Jonathan")
println john
然后我执行脚本并收到以下输出
Student@6ab778a
Student@1dac5ef
我觉得这很奇怪,因为脚本在 groovysh 中抛出异常但作为独立文件成功执行。
我的 groovy -v
是 Groovy Version: 2.6.0-alpha-2 JVM: 1.8.0_111 Vendor: Oracle Corporation OS: Windows 10
,我是 运行 groovysh 在具有管理员权限的 Powershell 中。
我做了几分钟的研究以更好地理解这种异常,但由于搜索词(groovy、def、groovysh、repl、实例化、异常等)太常见了,我无法找到任何明确解决此行为的内容。
任何解释将不胜感激
这在groovysh
documentation page上有描述:
Shell variables are all untyped (i.e. no def or other type information).
This will set a shell variable:
foo = "bar"
But, this will evaluate a local variable and will not be saved to the shell’s >environment:
def foo = "bar"
您可以启用 interpreter mode 来更改行为(在 groovysh
控制台中键入):
:set interpreterMode true
问题总结
今天早上我使用 groovysh 来测试闭包,但在这样做的过程中我遇到了意想不到的行为,我在中定义了一个 class groovysh 然后从 class 实例化一个对象如下
groovy:000> class Student {
groovy:001> def firstName
groovy:002> def lastName
groovy:003> }
===> true
groovy:000> def chris = new Student()
===> Student@52d239ba
然后我尝试使用隐式 setter 方法设置 firstName 属性,如下所示:
groovy:000> chris.setFirstName("chris")
并收到以下错误
Unknown property: chris
然后我尝试在没有 def
成功执行的情况下实例化一个新对象
groovy:000> jen = new Student()
===> Student@c1bd0be
groovy:000> jen.setFirstName("Jenifer")
===> null
不明白为什么会这样然后我创建了一个可执行 groovy 文件(如下所示)
class Student {
def firstName
def lastName
}
def chris = new Student()
chris.setFirstName("Christopher")
println chris
john = new Student()
john.setFirstName("Jonathan")
println john
然后我执行脚本并收到以下输出
Student@6ab778a
Student@1dac5ef
我觉得这很奇怪,因为脚本在 groovysh 中抛出异常但作为独立文件成功执行。
我的 groovy -v
是 Groovy Version: 2.6.0-alpha-2 JVM: 1.8.0_111 Vendor: Oracle Corporation OS: Windows 10
,我是 运行 groovysh 在具有管理员权限的 Powershell 中。
我做了几分钟的研究以更好地理解这种异常,但由于搜索词(groovy、def、groovysh、repl、实例化、异常等)太常见了,我无法找到任何明确解决此行为的内容。
任何解释将不胜感激
这在groovysh
documentation page上有描述:
Shell variables are all untyped (i.e. no def or other type information).
This will set a shell variable:
foo = "bar"
But, this will evaluate a local variable and will not be saved to the shell’s >environment:
def foo = "bar"
您可以启用 interpreter mode 来更改行为(在 groovysh
控制台中键入):
:set interpreterMode true