Groovy 方法命名约定还是魔术?
Groovy method naming convention or magic?
我尝试创建一个小型 DSL,但即使是简单的东西我也很吃力。
以下脚本给我一个错误。
def DEMON(String input) {
['a': input]
}
DEMON 'Hello thingy' a
由于某些原因,参数周围的括号不是可选的,我得到了一个错误。
此脚本运行良好:
def dEMON(String input) {
['a': input]
}
dEMON 'Hello thingy' a
注意:唯一的区别是小写第一个字符。
那么这里发生了什么?为什么脚本解释(编译?)不同?我必须遵循某种 method/class 命名方案吗?
更新:错误信息。我猜是语法错误:
unexpected token: Hello thingy @ line 4, column 7.
groovy 语法有时很复杂,编译器使用一些规则来选择它必须做什么。其中一条规则很简单:如果一个单词以大写字母开头,它可能是 class.
例如,f String
是在groovy中有效的语法,编译器将其转换为f(String.class)
。
您可以使用括号来帮助 groovy 理解您的 DEMON
不是 class 而是一种方法 DEMON('Hello thingy', a)
我尝试创建一个小型 DSL,但即使是简单的东西我也很吃力。 以下脚本给我一个错误。
def DEMON(String input) {
['a': input]
}
DEMON 'Hello thingy' a
由于某些原因,参数周围的括号不是可选的,我得到了一个错误。 此脚本运行良好:
def dEMON(String input) {
['a': input]
}
dEMON 'Hello thingy' a
注意:唯一的区别是小写第一个字符。 那么这里发生了什么?为什么脚本解释(编译?)不同?我必须遵循某种 method/class 命名方案吗?
更新:错误信息。我猜是语法错误:
unexpected token: Hello thingy @ line 4, column 7.
groovy 语法有时很复杂,编译器使用一些规则来选择它必须做什么。其中一条规则很简单:如果一个单词以大写字母开头,它可能是 class.
例如,f String
是在groovy中有效的语法,编译器将其转换为f(String.class)
。
您可以使用括号来帮助 groovy 理解您的 DEMON
不是 class 而是一种方法 DEMON('Hello thingy', a)