给出方法
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")
答案 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进行定义,那么这种语法比问题中使用的语法更清晰。