[英]confused about scala function literal
I confuse why the stringop3 is error. 我混淆为什么stringop3是错误的。 If I want to define value stringop3 has two params, one is a:String, the other is f:String=>String , what should I do. 如果我要定义值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)
the error is : error: not a legal formal paramete r. 错误是:错误:不是合法的形式参数。
Note: Tuples cannot be directly destructured in method or function parameters. 注意:元组不能在方法或函数参数中直接进行结构分解。
Either create a single parameter accepting the Tuple1, 创建一个接受Tuple1的参数,
or consider a pattern matching anonymous function: `{ case (param1, param1 ) => ... } 或者考虑匹配匿名函数的模式:`{case(param1,param1)=> ...}
val stringop3=(a:String)(f:String=>String)=>f(a) val stringop3 =(a:String)(f:String => String)=> f(a)
^
one error found 发现一个错误
Curried function definitions (eg: fn(a: A)(b: B): C
) can be visualised as fn: A => B => C. 咖喱函数定义(例如: fn(a: A)(b: B): C
)可以可视化为fn:A => B =>C。
So, you can define your stringops3 like this: 因此,您可以这样定义您的stringops3:
scala> val stringops3 = (a:String) => (f: String => String) => f(a)
stringops3: String => ((String => String) => String) = <function1>
scala> stringops3("foo")(_.toUpperCase)
res1: String = FOO
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.