我有一个有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", b="x", c="y", d="z")
foo(a="B", b=".", c=",", d="-")
foo(a="B", b="1", c="2", d="3")
我想用一种快速的方法为每个块创建一个方法,这样我就只需要指定其他3个参数。
def fooCurried(a: String) = foo(a, _: String, _: String, _: String)
val fooA = fooCurreid("A")
fooA("x", "y", "z")
fooA(".", ",", "-")
fooA("1", "2", "3")
val fooB = fooCurried("B")
fooB("x", "y", "z")
fooB(".", ",", "-")
fooB("1", "2", "3")
这种方法的问题是我丢失了命名参数,它们变成了v1
、v2
和v3
,在这种情况下使用命名参数很重要,因为其他3个参数的类型是相同的,所以很容易混淆。
有没有一种简洁的方法来定义一个fooCurried
函数,像上面那样,我可以在不同的上下文中轻松使用,但允许我使用命名参数?
我想要一些我可以这样使用的东西:
def fooCurried(a: String) = ???
val fooA = fooCurreid("A")
fooA(b="x", c="y", d="z")
fooA(b=".", c=",", d="-")
fooA(b="1", c="2", d="3")
先谢了!
3条答案
按热度按时间sxissh061#
不如这样:
您可以像这样使用它:
sqxo8psd2#
另一种方法是使用
case class
:但是
foo
将接受一个类作为参数,而不是4个多字符串。yiytaume3#
您可以将所有
b
c
d
Package 在一个case类中,如下所示