无法在空对象上调用方法 multiply() groovy
Cannot invoke method multiply() on null object groovy
考虑下面的代码
task circle {
doLast {
float r = Float.parseFloat(project.properties["radius"])
println (22/7)*(r ** 2)
}
}
task square {
doLast {
float s = Float.parseFloat(project.properties["side"])
println s*s
}
}
这会给出错误 Cannot invoke method multiply() on null object
如果我把上面的代码改成下面这样就好了
task circle {
doLast {
float r = Float.parseFloat(project.properties["radius"])
println 22/7*(r ** 2)
}
}
task square {
doLast {
float s = Float.parseFloat(project.properties["side"])
println s*s
}
}
可能是什么原因?
这里的问题是缺少实际 println
的括号,即
将导致执行以下代码 (println(22/7))*(r ** 2)
。 println
首先完成,其结果 (void
) 变为
null
。然后它会抛出您看到的错误。你的“不扔”
示例将解析器推向正确的方向。
groovy 中的括号是“如果没有歧义则可选”,这是一个相当广泛的
学期。当然,新的鹦鹉解析器让这变得更好了,你
经常会看到这样的事情炸毁。简单的经验法则:只是
除非你正在处理,否则不要遗漏调用函数的括号
用一个微不足道的术语。
考虑下面的代码
task circle {
doLast {
float r = Float.parseFloat(project.properties["radius"])
println (22/7)*(r ** 2)
}
}
task square {
doLast {
float s = Float.parseFloat(project.properties["side"])
println s*s
}
}
这会给出错误 Cannot invoke method multiply() on null object
如果我把上面的代码改成下面这样就好了
task circle {
doLast {
float r = Float.parseFloat(project.properties["radius"])
println 22/7*(r ** 2)
}
}
task square {
doLast {
float s = Float.parseFloat(project.properties["side"])
println s*s
}
}
可能是什么原因?
这里的问题是缺少实际 println
的括号,即
将导致执行以下代码 (println(22/7))*(r ** 2)
。 println
首先完成,其结果 (void
) 变为
null
。然后它会抛出您看到的错误。你的“不扔”
示例将解析器推向正确的方向。
groovy 中的括号是“如果没有歧义则可选”,这是一个相当广泛的 学期。当然,新的鹦鹉解析器让这变得更好了,你 经常会看到这样的事情炸毁。简单的经验法则:只是 除非你正在处理,否则不要遗漏调用函数的括号 用一个微不足道的术语。