部分应用的Function2带有第一个和第二个参数

时间:2014-02-11 12:09:22

标签: scala currying

给出方法

def f(a: String, b: String) = ???

我想获得部分应用的功能(第一个参数和第二个参数)。

我写了以下代码:

def fst = f _ curried "a"
def snd = (s: String) => (f _ curried)(s)("b")

有更好的方法吗?

[update] snd可写得更短def snd = (f _ curried)((_: String))("b")

2 个答案:

答案 0 :(得分:5)

这更简单:

def fst = f("a", (_: String))
def snd = f((_: String), "b")

但请注意,它会重新计算每次通话中部分应用的功能,因此在大多数情况下我更喜欢val(或lazy val}而不是def

答案 1 :(得分:2)

另一种方法是使用多个参数列表:

def f(a: String)(b: String) = ???

没有提供args:

def fst = f _

首先提供了arg:

def fst = f("a")

只提供了第二个arg:

def fst = f(_: String)("b")

所有提供的参数:

def snd = f("a")("b")

如果您按照相同的顺序对args进行定义,那么这种语法比问题中使用的语法更清晰。