简体   繁体   English

对scala函数文字感到困惑

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM