在 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/,但无法决定要寻找什么来找到解释。

好的,从头开始:

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

    log.debug 'lol'
    

    完全相同:

    log.debug('lol')
    

    由于 on()off() 没有任何参数,因此 需要 使用括号 - 否则它们可能会被误认为 onoff 字段 。空白将方法与参数分开。

  2. evt.value"$evt.value" - 这是不一样的。第一个只是一个文字字符串,第二个是 GString。第一个将打印 evt.value 而第二个将评估 evt 对象的 value 变量的值。如进一步的代码所示,它可能 openclosed

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

    items.collect { print it; it*it }
    
  4. 从第12行开始也是方法调用。等于:

    input("contact1", "capability.contactSensor", title: "Where?")
    

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

延伸阅读:

  1. Methods - 还要查找 命名参数 .
  2. Optionality
  3. All docs