Sta*_*tan 5 syntax lambda scala function-literal scala-placeholder-syntax
我有以下代码:
var x = Array(1,3,4,4,1,1,3)
var m = Int.MaxValue
x.foreach((x)=>(m = m min x))
Run Code Online (Sandbox Code Playgroud)
我试图将最后一句简化为:
x.foreach((m = _ min m))
Run Code Online (Sandbox Code Playgroud)
但口译员说:
scala> x.foreach((m = _ min m))
<console>:8: error: missing parameter type for expanded function ((x$1) => x$1.min(m))
x.foreach((m = _ min m))
^
Run Code Online (Sandbox Code Playgroud)
我试图更明确地说明这种类型:
scala> x.foreach((m = (_:Int) min m))
<console>:8: error: type mismatch;
found : (Int) => Int
required: Int
x.foreach((m = (_:Int) min m))
^
Run Code Online (Sandbox Code Playgroud)
编译器和我彼此不了解:(
最好的祝福,
斯坦
首先,请注意
val m = x.min
Run Code Online (Sandbox Code Playgroud)
做你想做的事,就像
val m = (Int.MaxValue /: x)(_ min _)
Run Code Online (Sandbox Code Playgroud)
我将让您阅读有关这些内容的更多信息(集合和折叠的 min 方法;请注意,这些方法并不像您编写的那么快)。
问题在于,当您编写下划线时,编译器会迷失您的意思以及有效类型可能是什么,并且当您添加类型信息时,它认为您正在尝试在那里编写一个函数并将其分配给m
。但当然m
是一个Int
,而不是一个函数,所以它抱怨。
明确地写出来就可以了。这只是一些额外的字符:
x.foreach(i => m = m min i)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3145 次 |
最近记录: |