5

我有以下代码:

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))
                           ^

编译器和我彼此不理解:(

此致,

斯坦

4

1 回答 1

4

首先,请注意

val m = x.min

做你想做的事

val m = (Int.MaxValue /: x)(_ min _)

我将留给您阅读有关这些内容的更多信息(有关集合和折叠的 min 方法;请注意,这些方法不如您写的那么快)。

问题是编译器迷失了你的意思以及当你写下划线时可能是什么有效类型,当你添加类型信息时,它认为你正在尝试在那里编写一个函数并将其分配给m. 但当然m是一个Int,而不是一个函数,所以它抱怨。

明确地写出来。它只是几个额外的字符:

x.foreach(i => m = m min i)
于 2011-05-12T17:45:27.087 回答