我混淆了为什么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)
^
找到一个错误
答案 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