关于scala函数文字的困惑

时间:2015-12-05 10:52:56

标签: scala function

我混淆了为什么stringop3是错误的。如果我想定义值stringop3有两个参数,一个是: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)

错误是: 错误:不是合法的正式参数 河

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

创建一个接受Tuple1的参数,

或考虑匹配匿名函数的模式:`{case(param1,param1 )=> ......}

val stringop3 =(a:String)(f:String => String)=> f(a)

                      ^

找到一个错误

1 个答案:

答案 0 :(得分:4)

Curried函数定义(例如:fn(a: A)(b: B): C)可以显示为fn:A => B =>下进行。

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

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

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