println -1やprintln[1]はなぜエラーなのか
Groovyで、println -1やprintln[1]を、println(-1)やprintln([1])のつもりで書いても以下のようなエラーになります。
$ groovy -e 'println -1'
Caught: groovy.lang.MissingPropertyException: No such property: println for class: script_from_command_line
at script_from_command_line.run(script_from_command_line:1)$ groovy -e 'println [1]'
Caught: groovy.lang.MissingPropertyException: No such property: println for class: script_from_command_line
at script_from_command_line.run(script_from_command_line:1)
なぜエラーなのかというと、「expr - 1」という減算の式文や、「expr[1]」のような添字参照の式文と解釈されるからですね。
この問題を回避するには、括弧を省略しないか、
println = new Object() println.metaClass.methodMissing = {name, arg-> if (name == 'minus') { println(-arg[0]) } else if (name == 'getAt') { if (arg[0] instanceof Range) { println(arg); } else if (arg[0] instanceof List) { println(arg[0]) } else { println([arg[0]]) } } }
のようにprintlnという変数をつくってやりますw。
groovy:000> println [1..3] [1..3] ===> null groovy:000> println -5 -5 ===> null