第一刀: 命名参数

groovy中的参数列表可以被命名, 明明有啥好处呢? 初步来看就是你不需要记住参数的顺序了

def foo(param) {
    println "${param.a}, ${param.b}, ${param.c}"
}

foo a:1, b:2, c:3
foo b:2, c:3, a:1 //跟上面一句的调用结果是相同的

然而还不止如此, groovy甚至比你想象的更聪明

def bar(p1, p2, p3) {
    assert p1.a == 1
    assert p1.b == 2
    assert p1.c == 3

    assert p2 == "p2"
    assert p3 == "p3"

    println "success"
}

bar "p2","p3", a:1, b:2, c:3
bar  a:1, b:2, c:3, "p2","p3"
bar  a:1, b:2, "p2", c:3, "p3" //上面三行的调用结果都是一样的

正如你所看到的, groovy能够自动的匹配参数, 会把a:1, b:2, c:3 组合起来赋给p1, 利用这点我们就能够写出"优雅"的函数了

比如我们定义这样一个"转账"的函数

def transfer(transaction, amount) {
    println """ Transfering ${amount} from ${transaction.from} to ${transaction.to} """
}

transfer 100, from: "alex", to: "tutu" //这样的调用很有点dsl的味道了吧


再比如下面这个函数, 它的作用是发送一条消息给某个人

def sendMessage(receiver, message) {
    println "sending ${message} to ${receiver}"
}

 

对应的调用方式是这样的

sendMessage "alex", "a message"

 

看起来貌似没啥不好, 但如果想要更加dsl一些的话, 就可以写成这个样:

def sendMessage1(receiver, message) {
    println "sending ${message} to ${receiver.to}"
}

sendMessage1 "You're welcome!", to: "Alex" //这样就不需考虑参数顺序了

looks better , ha?

相关文章:

  • 2022-01-28
  • 2021-11-29
  • 2021-08-20
  • 2022-12-23
  • 2022-12-23
  • 2021-12-03
  • 2021-05-11
猜你喜欢
  • 2022-01-30
  • 2021-11-04
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-01-04
相关资源
相似解决方案