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

3

给定一个方法

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

我想获取部分应用函数(有第一个参数和第二个参数的情况下)。

我编写了以下代码:

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

有没有更好的方法?

[更新] snd 可以写地更短 def snd = (f _ curried)((_: String))("b")

2个回答

5
这更简单:
def fst = f("a", (_: String))
def snd = f((_: String), "b")

但需要注意的是,它会在每次调用时重新计算部分应用的函数,因此在大多数情况下我更喜欢使用val(或者可能是lazy val),而不是def


error: missing parameter type for expanded function ((x$1) => f("a", x$1)) - Yaroslav
@Yaroslav 谢谢,已修复。 - Alexey Romanov

2
另一种方法是使用多个参数列表:
def f(a: String)(b: String) = ???

未提供参数:

def fst = f _

提供的第一个参数:

def fst = f("a")

仅提供第二个参数:

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

所有参数都已提供:

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

如果您按照定义的顺序进行参数柯里化,则此语法比问题中使用的语法更简洁。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接