2014-02-11 41 views
3

给定一个方法部分地与第一和第二个参数

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

我想获得两个部分应用功能(与第一个参数和与所述第二个)应用功能2。

我已经写了下面的代码:

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

有没有更好的办法?

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

回答

5

这是简单的:

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

但要注意它重新计算每次通话的部分应用功能,所以我宁愿val(或可能lazy val )而不是def在大多数情况下。

+0

'错误:缺少扩展函数的参数类型((x $ 1)=> f(“a”,x $ 1))' – Yaroslav

+0

@Yaroslav谢谢,修正。 –

2

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

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

提供无参数:

def fst = f _ 
提供

第一个参数:

def fst = f("a") 

仅次于ARG提供:

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

提供的所有ARGS:

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

如果你讨好ARGS中定义它们的相同顺序那么这个语法比在问题中所使用的清洁一点。 (错误代码:

相关问题