我有以下代码:
var x = Array(1,3,4,4,1,1,3)
var m = Int.MaxValue
x.foreach((x)=>(m = m min x))
我试图将最后一句简化为:
x.foreach((m = _ min m))
但口译员说:
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))
^
我试图更明确地说明这种类型:
scala> x.foreach((m = (_:Int) min m))
<console>:8: error: type mismatch;
found : (Int) => Int
required: Int
x.foreach((m = (_:Int) min m))
^
编译器和我彼此不了解:(
最好的祝福,
公寓
首先,请注意
val m = x.min
像你一样做你想做的事
val m = (Int.MaxValue /: x)(_ min _)
我将留给你阅读更多关于这些事情的内容(关于集合的min方法和折叠;注意这些并不像你写的那么快)。
问题在于编译器会因为你的意思和写下划线时可能存在的有效类型而迷失方向,当你添加类型信息时,它认为你正试图在那里写一个函数并将它分配给m
。但当然m
是一个Int
,而不是一个功能,所以它抱怨。
只需明确写出来。它只有几个额外的字符:
x.foreach(i => m = m min i)