コード -
class Parser {
def parseName(String name) {
if (name.contains(',')) {
parts = name.split(',')
}
}
}
p = new Parser()
p.parseName('kshitiz,sharma')
例外 -
groovy.lang.MissingPropertyException: No such property: parts for class: Parser
at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:50)
at
上記のスクリプトの AST は次のとおりです。
p = new Parser()
p.parseName('kshitiz,sharma')
public class script1376460726356 extends groovy.lang.Script {
public script1376460726356() {
}
public script1376460726356(groovy.lang.Binding context) {
super.setBinding(context)
}
public static void main(java.lang.String[] args) {
org.codehaus.groovy.runtime.InvokerHelper.runScript(script1376460726356, args)
}
public java.lang.Object run() {
p = new Parser()
p.parseName('kshitiz,sharma')
}
}
public class Parser extends java.lang.Object {
public java.lang.Object parseName(java.lang.String name) {
if (name.contains(',')) {
parts = name.split(',')
}
}
}
質問 -
parts
に対してエラーが発生し、 に対してエラーが発生しないのはなぜp
ですか?p
定義されていることも、配置されてからアクセスされることさえありませんscript binding
か? method で直接使用されるだけrun()
です。- トップで何を
p = new Parser()
しているの?Java では、すべてが単なる幻想であるグローバル変数を持つクラスにあるべきではありませんか? - これは、
def
キーワードがスタンドアロン スクリプトでのみオプションであり、ユーザー定義クラスではオプションではないということですか?