常规声明语句的行为类似于方法而不是语句

时间:2019-07-17 08:03:57

标签: groovy

如果我对正确的groovy语句使用一个断言,但是我省略了括号,那么“断言”会抛出带有“意外令牌”消息的MultipleCompilationErrorsException

assert(至少if)的行为类似于方法而不是语句,因为嵌套函数调用不接受省略括号。

因此,当我有一个正确的示例并将其用作断言时,我会得到一个错误。如果没有assert,我希望assert接受正确的常规语句。

我没有在Stackoverflow,Groovy JIRA或通过互联网搜索中发现此问题。

assert null == println('foo')

println 'foo'

两者均输出foo(如预期),但是

assert null == println 'foo'

抛出

org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
script_from_command_line: 1: unexpected token: foo @ line 1, column 24.
   assert null == println 'foo'
                          ^

1 error

1 个答案:

答案 0 :(得分:0)

FYI:assert也是returnimport等之类的关键字。 参见groovy doc

我们知道,我们不能省略括号,例如return之类的关键字。请参阅文档omitting_parentheses。不幸的是,它仅讨论了不提及任何关键字的方法:(。

return test("String")  // will work

return test "String" // won't

我希望你明白了。