事实上,我的问题比我在标题中解释的要广泛得多。我在理解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意味着" debug"类的功能称为" log"。(或类似的东西)但是之后的空白是什么?更重要的是,为什么它会说" $ evt.value",当它可以简单地说" evt.value"在第8和第10行?为什么在行尾没有分号。我知道,他们是可选的,但据我所知,有关何时使用它们以及何时不使用它们的惯例。最后,我有一个奇怪的代码行,完全是疯了(当然对我来说):
11: section ("When the door opens/closes...") {
12: input "contact1", "capability.contactSensor",
13: title: "Where?"
14: }
我应该如何理解从12开始的行?
我已经查看了http://groovy.codehaus.org/,但无法确定要查找的内容以便找到解释。
答案 0 :(得分:3)
好的,从一开始就是这样:
在groovy中,当调用带参数的方法时,可以省略括号()
。所以
log.debug 'lol'
与:
完全相同log.debug('lol')
由于on()
和off()
没有任何参数,因此需要使用parens - 或者它们可能与on
和{{ 1}} 字段。空白将方法与参数分开。
off
vs evt.value
- 它不一样。第一个是文字字符串,第二个是"$evt.value"
。首先将打印 evt.value ,而第二个将评估GString
对象的value
变量的值。如下面的代码所示,它可能打开或已关闭。
分号是可选的,这就是我所能说的。不知道为什么会有分号。有时候需要使用分号 - 例如oneliner
evt
从第12行开始,它也是一个方法调用。它等于:
items.collect { print it; it*it }
它将地图作为第一个参数传递,然后将两个字符串作为第二个和第三个参数传递。
进一步阅读: