在 Groovy 中调用方法的正确方法是什么
What is the proper way of calling a method in Groovy
事实上,我的问题比我在标题中解释的要广泛得多。我在理解 Groovy 中的代码时遇到了问题,该代码本应很容易理解。请查看以下代码。
// event handlers are passed the event itself
1:def contactHandler(evt) {
2: log.debug "$evt.value"
3:
4: // The contactSensor capability can be either "open" or "closed"
5: // If it's "open", turn on the light!
6: // If it's "closed" turn the light off.
7: if (evt.value == "open") {
8: switch1.on();
9: } else if (evt.value == "closed") {
10: switch1.off();
11: }
12:}
我能理解第 2 行之后开始的所有内容,但是如果第 8 行或第 10 行是调用方法的正确方法,那么第 2 行到底发生了什么?我可以理解 log.debug 表示 class 的 "debug" 函数称为 "log"。(或类似的东西)但是它后面的空白 space 是什么?更重要的是,为什么在第 8 行和第 10 行可以简单地说 "evt.value" 时说“$evt.value”?为什么行尾没有分号。我知道,它们是可选的,但据我所知,关于何时使用它们以及何时不使用它们有一个约定。最后,我有一行完全疯狂的奇怪代码(当然对我来说):
11: section ("When the door opens/closes...") {
12: input "contact1", "capability.contactSensor",
13: title: "Where?"
14: }
从12开始的那一行应该怎么理解?
我已经查看了 http://groovy.codehaus.org/,但无法决定要寻找什么来找到解释。
好的,从头开始:
在 groovy 中,您可以在调用带参数的方法时省略括号 ()
。所以
log.debug 'lol'
完全相同:
log.debug('lol')
由于 on()
和 off()
没有任何参数,因此 需要 使用括号 - 否则它们可能会被误认为 on
和 off
字段 。空白将方法与参数分开。
evt.value
与 "$evt.value"
- 这是不一样的。第一个只是一个文字字符串,第二个是 GString
。第一个将打印 evt.value 而第二个将评估 evt
对象的 value
变量的值。如进一步的代码所示,它可能 open 或 closed。
分号是可选的,我只能说这么多。不知道为什么会有分号。有时需要使用分号 - 在 oneliner 中,例如
items.collect { print it; it*it }
从第12行开始也是方法调用。等于:
input("contact1", "capability.contactSensor", title: "Where?")
它传递一个映射作为第一个参数,然后传递两个字符串作为第二和第三个参数。
延伸阅读:
- Methods - 还要查找 命名参数 .
- Optionality
- All docs
事实上,我的问题比我在标题中解释的要广泛得多。我在理解 Groovy 中的代码时遇到了问题,该代码本应很容易理解。请查看以下代码。
// event handlers are passed the event itself
1:def contactHandler(evt) {
2: log.debug "$evt.value"
3:
4: // The contactSensor capability can be either "open" or "closed"
5: // If it's "open", turn on the light!
6: // If it's "closed" turn the light off.
7: if (evt.value == "open") {
8: switch1.on();
9: } else if (evt.value == "closed") {
10: switch1.off();
11: }
12:}
我能理解第 2 行之后开始的所有内容,但是如果第 8 行或第 10 行是调用方法的正确方法,那么第 2 行到底发生了什么?我可以理解 log.debug 表示 class 的 "debug" 函数称为 "log"。(或类似的东西)但是它后面的空白 space 是什么?更重要的是,为什么在第 8 行和第 10 行可以简单地说 "evt.value" 时说“$evt.value”?为什么行尾没有分号。我知道,它们是可选的,但据我所知,关于何时使用它们以及何时不使用它们有一个约定。最后,我有一行完全疯狂的奇怪代码(当然对我来说):
11: section ("When the door opens/closes...") {
12: input "contact1", "capability.contactSensor",
13: title: "Where?"
14: }
从12开始的那一行应该怎么理解?
我已经查看了 http://groovy.codehaus.org/,但无法决定要寻找什么来找到解释。
好的,从头开始:
在 groovy 中,您可以在调用带参数的方法时省略括号
()
。所以log.debug 'lol'
完全相同:
log.debug('lol')
由于
on()
和off()
没有任何参数,因此 需要 使用括号 - 否则它们可能会被误认为on
和off
字段 。空白将方法与参数分开。evt.value
与"$evt.value"
- 这是不一样的。第一个只是一个文字字符串,第二个是GString
。第一个将打印 evt.value 而第二个将评估evt
对象的value
变量的值。如进一步的代码所示,它可能 open 或 closed。分号是可选的,我只能说这么多。不知道为什么会有分号。有时需要使用分号 - 在 oneliner 中,例如
items.collect { print it; it*it }
从第12行开始也是方法调用。等于:
input("contact1", "capability.contactSensor", title: "Where?")
它传递一个映射作为第一个参数,然后传递两个字符串作为第二和第三个参数。
延伸阅读:
- Methods - 还要查找 命名参数 .
- Optionality
- All docs