加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

groovy – 命名参数

发布时间:2020-12-14 16:38:32 所属栏目:大数据 来源:网络整理
导读:我有办法 def test(String a,String b) { } 我想用动态参数映射来表示它。 我总是这样 test(['1','2']); //valid call 并且 test([a:'1',b:'2']); //= does not work 将工作。但它没有。所以我记得the spread operator,但是不能让它上班…. 有没有办法像以
我有办法

def test(String a,String b) { }

我想用动态参数映射来表示它。
我总是这样

test(['1','2']); //valid call

并且

test([a:'1',b:'2']); //=> does not work

将工作。但它没有。所以我记得the spread operator,但是不能让它上班….

有没有办法像以上一样的方法来调用一些地图作为参数而不是单个参数?

解决方法

也许我错过了一些东西,但是我现在不认为Groovy已经命名了参数。有 discussions和 proposals,但我没有任何官方的意见。

对于你的情况,我认为地图传播可能有所帮助,但不是每一种情况。获取值后,它遵循映射值声明的顺序:

def test(String a,String b) { "a=$a,b=$b" }
def test(Map m) { test m*.value }

assert test(a: "aa",b:"bb") == "a=aa,b=bb"
assert test(b: "aa",a:"bb") != "a=aa,b=bb" // should be false :-(
assert test(b: "ccc",a:"ddd") == "a=ddd,b=ccc" // should have worked :-(

对于课程,我可以建议Groovy’s as operator吗?

@groovy.transform.CompileStatic
class Spread {
  class Person {
    String name
    BigDecimal height
  }

  def method(Person p) {
    "Name: ${p.name},height: ${p.height}"
  }

  def method(Map m) { method m as Person }

  static main(String[] args) {
    assert new Spread().method(name: "John",height: 1.80) == 
      "Name: John,height: 1.80"
  }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读