2015-12-05 121 views
0

我混淆了为什么stringop3是错误的。如果我想定义值stringop3有两个参数,一个是a:String,另一个是f:String => String,我应该怎么做。困惑于斯卡拉功能文字

// right 
def stringop (a:String)(f:String=>String) = f(a) 
// right 
val stringop2=((a:String),(f:String=>String))=>f(a) 
// error 
val stringop3=(a:String)(f:String=>String)=>f(a) 

的错误是: 错误:不是合法的正式paramete 河

注意:元组不能直接在方法或函数参数中解构。

要么建立一个单一的参数接受Tuple1,

或考虑模式匹配匿名功能:`{情况下(参数1,参数1 )=> ...}

VAL stringop3 =(A:字符串)(F:字符串=>字符串)=> F(一)

    ^

一个错误发现

回答

4

咖喱函数定义(例如:fn(a: A)(b: B): C)可以看作FN:A => B => C.

所以,你可以定义你stringops3这样的:

scala> val stringops3 = (a:String) => (f: String => String) => f(a) 
stringops3: String => ((String => String) => String) = <function1> 

scala> stringops3("foo")(_.toUpperCase) 
res1: String = FOO