我有一个方法,有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