Wei*_*Lin 1 lambda scala anonymous-function scala-placeholder-syntax
这有效: (1 to 5).reduceLeft( _+_ )
但这不是: (x:Int,y:Int)=>_+_
<console>:8: error: missing parameter type for expanded function ((x$1, x$2) => x$1.$plus(x$2))
(x:Int,y:Int)=>_+_
^
<console>:8: error: missing parameter type for expanded function ((x$1: <error>, x$2) => x$1.$plus(x$2))
(x:Int,y:Int)=>_+_
^
Run Code Online (Sandbox Code Playgroud)
它是不一致的,因为在第一种情况下,匿名函数(_+_)成功编译,但第二种情况失败.
有没有我错过或误解的东西?或者只是语法定义?
没有不一致.在第一种情况下,您将创建具有两个参数的匿名函数,然后添加这些参数,即:
(1 to 5).reduceLeft((x, y) => x + y)
Run Code Online (Sandbox Code Playgroud)
但是,在第二种情况下,您将创建一个匿名函数,该函数返回另一个带有两个参数的匿名函数:
(x: Int, y: Int) => ((a, b) => a + b)
Run Code Online (Sandbox Code Playgroud)
(看起来你认为这(x: Int, y: Int) => _+_是一样的(x: Int, y: Int) => x + y,但事实并非如此.)
在第一种情况下,您_ + _在其参数类型已知的上下文中使用(作为参数reduceLeft).在第二种情况下,您似乎在无法推导出内部函数的参数类型的上下文中使用它,这正是您的错误所在.
| 归档时间: |
|
| 查看次数: |
131 次 |
| 最近记录: |