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。しかしもちろん、これは関数でmIntなく、なので、文句を言います。

明示的に書いてください。それはほんの少しの余分な文字です:

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