在Groovy中调用方法的正确方法是什么?

时间:2015-03-22 10:05:43

标签: groovy method-call

事实上,我的问题比我在标题中解释的要广泛得多。我在理解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/,但无法确定要查找的内容以便找到解释。

1 个答案:

答案 0 :(得分:3)

好的,从一开始就是这样:

  1. 在groovy中,当调用带参数的方法时,可以省略括号()。所以

    log.debug 'lol'
    

    与:

    完全相同
    log.debug('lol')
    

    由于on()off()没有任何参数,因此需要使用parens - 或者它们可能与on和{{ 1}} 字段。空白将方法与参数分开。

  2. off vs evt.value - 它不一样。第一个是文字字符串,第二个是"$evt.value"。首先将打印 evt.value ,而第二个将评估GString对象的value变量的值。如下面的代码所示,它可能打开已关闭

  3. 分号是可选的,这就是我所能说的。不知道为什么会有分号。有时候需要使用分号 - 例如oneliner

    evt
  4. 从第12行开始,它也是一个方法调用。它等于:

    items.collect { print it; it*it }
    

    它将地图作为第一个参数传递,然后将两个字符串作为第二个和第三个参数传递。

  5. 进一步阅读:

    1. Methods - 另请参阅命名参数
    2. Optionality
    3. All docs