为什么我可以在groovy中调用一个没有点的方法?

2wnc66cl  于 8个月前  发布在  其他
关注(0)|答案(1)|浏览(68)

我注意到我可以调用没有.符号的方法,但我在文档中找不到任何关于它的信息。你能告诉我它是如何工作的或者指向文档吗?

static void main(String[] args) {
    def person = new Person()
    person.setName "Socrates" setAge 20
}

class Person {
    Person setName (name) {
        return this
    }

    Person setAge (age) {
        return this
    }
}
vyu0f0g1

vyu0f0g11#

这是一个专门用于编写您自己的领域特定语言的功能。链接的方法调用可以转换成类似句子的语法。
关于Groovy DSL docs
“命令链”功能扩展了这一点,允许我们链接这种无括号的方法调用,既不需要参数周围的括号,也不需要链接调用之间的点。
示例(来自文档):

// equivalent to: turn(left).then(right)
turn left then right

示例(来自谈话 *Groovy:The Awesome Parts(Paul King):

// equivalent to: move(forward).at(3.getKm().div(h))
move forward at 3.km/h

这里有一个简单的例子,如何做到这一点:

String forward = "forward"
Integer.metaClass.getKm = { return delegate * 1000 }
int h = 3600

move(forward).at(3.getKm().div(h))
move forward at 3.km/h

def move(String direction){
  return new Vehicle(direction: forward)
}

class Vehicle{
    String direction
    def at(speedInMeterPerSecond){
        println "moving $direction with $speedInMeterPerSecond m/s"
    }
}

指纹

moving forward with 0.8333333333 m/s
moving forward with 0.8333333333 m/s

相关问题