要創建可以在斯卡拉用於理解一個新的類,似乎所有你需要做的就是定義一個地圖功能:爲什麼過濾器必須在scala的for循環中爲模式匹配定義?
scala> class C[T](items: T*) {
| def map[U](f: (T) => U) = this.items.map(f)
| }
defined class C
scala> for (x <- new C(1 -> 2, 3 -> 4)) yield x
res0: Seq[(Int, Int)] = ArrayBuffer((1,2), (3,4))
但是,只適用於簡單的for循環不存在模式匹配在<-
的左側。如果您嘗試模式匹配那裏,你得到的是filter
方法沒有定義投訴:
scala> for ((k, v) <- new C(1 -> 2, 3 -> 4)) yield k -> v
<console>:7: error: value filter is not a member of C[(Int, Int)]
for ((k, v) <- new C(1 -> 2, 3 -> 4)) yield k -> v
實現此匹配模式爲什麼需要過濾?我本來以爲會斯卡拉翻譯只是上述循環成等價的map
電話:
scala> new C(1 -> 2, 3 -> 4).map{case (k, v) => k -> v}
res2: Seq[(Int, Int)] = ArrayBuffer((1,2), (3,4))
,但似乎做工精細,所以for循環必須翻譯成別的東西。什麼是翻譯成需要filter
方法?
我檢查了帶有和不帶'5'的編譯代碼。當沒有'5'時,不使用過濾器。 – IttayD 2010-12-07 19:56:50