Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Variables 变量绑定在groovysh中实际是如何工作的?_Variables_Binding_Groovy_Groovyshell - Fatal编程技术网

Variables 变量绑定在groovysh中实际是如何工作的?

Variables 变量绑定在groovysh中实际是如何工作的?,variables,binding,groovy,groovyshell,Variables,Binding,Groovy,Groovyshell,我不明白的关键是: % groovysh Groovy Shell (1.8.6, JVM: 1.6.0_21) Type 'help' or '\h' for help. ------------------------------------------------------ groovy:000> class vars { groovy:001> static int x = 1; groovy:002> } ===> true groovy:000> pr

我不明白的关键是:

% groovysh
Groovy Shell (1.8.6, JVM: 1.6.0_21)
Type 'help' or '\h' for help.
------------------------------------------------------
groovy:000> class vars {
groovy:001> static int x = 1;
groovy:002> }
===> true
groovy:000> println new vars().x
1
===> null
groovy:000> println vars.x
ERROR groovy.lang.MissingPropertyException:
No such property: vars for class: groovysh_evaluate
Possible solutions: class
        at groovysh_evaluate.run (groovysh_evaluate:2)
        ...

如果
vars
解析为表达式
new vars().x
中的某个内容,为什么不也解析为表达式
vars.x
?它就像一个幻象标识符,实际上只是为了实例化而存在。

您的问题是
vars
是一个类,而不是一个对象,并且x没有声明为静态属性。最好的做法是始终使用大写字母命名类,以防止此类混淆。

您的代码不起作用,因为您使用了错误的命名约定。您应该使用大写字母V编写该类。这样,Groovy shell就知道您引用的是一个类,而不是一个变量,以防Groovy无法确定它

这就是你真正想要的:

groovy:000> class Vars {
groovy:001>     static int x = 1
groovy:002> }
===> true
groovy:000> Vars.x
===> 1

希望有帮助

哈哈,实际上
x
是静态的。我不知道为什么这个答案会被否决,因为除了静态部分,它(大部分)是正确的答案。您所引用的变量“vars”不存在。没有名为vars的变量,只有一个类,因此会出现错误消息:“no-this-property”,谢谢。不过,我确实误读了这个问题,并受到了适当的惩罚。对不起,@BigEd,它确实是小写的,尽管您的回答听起来似乎是风格问题,而不是实际的groovysh“语法”。锁一打开,我就撤消我的否决票。@ErikPragt,我不确定没有变量
vars
;毕竟
newvars()
起作用了。相反,我想说
vars
是一个变量(即名称),它命名(即绑定到、解析到、引用)一个类。或者至少,这是我所期待的;但显然groovysh依赖于某些区分大小写的命名约定来帮助它弄清楚一个给定的名称到底指的是什么,这是我在这里违反的。哇!听起来像是groovysh实现中的一个史诗般的破解/启发。有趣的是,
new vars()
工作得很好。接下来:groovysh用于将名称解析为类/变量等的所有规则都有文档吗?当然,“new vars”工作得很好,请参见下面的解释。顺便说一句,有效的方法是“myVars=newvars()”。这确实创建了一个变量。