我一直在玩Scala代碼,並遇到了一個編譯器錯誤,我不明白。該代碼生成一對Ints對的向量,然後嘗試對其進行過濾。Scala:定義一個函數是正確的類型
val L = for (x <- (1 to 5)) yield (x, x * x)
val f = (x: Int, y: Int) => x > 3
println(L.filter(f))
編譯器抱怨試圖用f
作爲參數爲filter
方法與編譯器錯誤消息是:
error: type mismatch;
found : (Int, Int) => Boolean
required: ((Int, Int)) => Boolean
如何定義功能f
正確,以滿足所需的功能類型?我嘗試添加周圍(x: Int, y: Int)
額外的括號,但是這給了:
error: not a legal formal parameter
val f = ((x: Int, y: Int)) => x > 3
^
這個問題是去除參數列表和元組之間的區別的爭論。也就是說,現在,'f(x,y)'中的'(x,y)'是一種與裸露的'(x,y)'本身不同的東西。不幸的是,消除這種區別在技術上並不重要。 –