1

コード -

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(',')
        }
    }
}

質問 -

  1. partsに対してエラーが発生し、 に対してエラーが発生しないのはなぜpですか? p定義されていることも、配置されてからアクセスされることさえありませんscript bindingか? method で直接使用されるだけrun()です。
  2. トップで何をp = new Parser()しているの?Java では、すべてが単なる幻想であるグローバル変数を持つクラスにあるべきではありませんか?
  3. これは、defキーワードがスタンドアロン スクリプトでのみオプションであり、ユーザー定義クラスではオプションではないということですか?
4

1 に答える 1