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

如何在scala中使用带有curried函数的命名参数

发布时间:2020-12-16 18:17:18 所属栏目:安全 来源:网络整理
导读:我有一个方法,有4个参数,可以在块中使用.在每个块中,第一个参数始终相同: // Block 1 - first parameter always "A"foo(a="A",b="x",c="y",d="z")foo(a="A",b=".",c=",",d="-")foo(a="A",b="1",c="2",d="3")// Block 2 - first parameter always "B"foo(a="
我有一个方法,有4个参数,可以在块中使用.在每个块中,第一个参数始终相同:

// Block 1 - first parameter always "A"
foo(a="A",b="x",c="y",d="z")
foo(a="A",b=".",c=",",d="-")
foo(a="A",b="1",c="2",d="3")

// Block 2 - first parameter always "B"
foo(a="B",d="z")
foo(a="B",d="-")
foo(a="B",d="3")

我想快速为每个块创建一个方法,这样我只需要指定其他3个参数.目前我可以这样做:

def fooCurried(a: String) = foo(a,_: String,_: String)

val fooA = fooCurreid("A")
fooA("x","y","z")
fooA(".","-")
fooA("1","2","3")

val fooB = fooCurried("B")
fooB("x","z")
fooB(".","-")
fooB("1","3")

这种方法的问题是我丢失了我的命名参数.它们变成v1,v2和v3.在这种情况下使用命名参数很重要,因为其他3个参数的类型相同,因此很容易混淆.

是否有一种干净的方法来定义像上面这样的fooCurried函数,我可以在不同的上下文中轻松使用但是让我使用命名参数?

我想要一些我可以这样使用的东西:

def fooCurried(a: String) = ???

val fooA = fooCurreid("A")
fooA(b="x",d="z")
fooA(b=".",d="-")
fooA(b="1",d="3")

提前致谢!

解决方法

这个怎么样 :

case class fooCurried(a: String) {
  def apply(b: String,c: String,d: String) = {
    // do something
    println(a + "," + b + "," + c + "," + d)
  }
}

你可以像这样使用它:

scala> val fooA = fooCurried(a = "A")
fooA: fooCurried = fooCurried(A)

scala> fooA(b="B",c="C",d="D")
A,B,C,D

scala> fooA(b="x",d="z")
A,x,y,z

(编辑:李大同)

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

    推荐文章
      热点阅读