2
我們希望在列表中調用一個List,並在Seq上調用Seq。通過implicits爲Scala序列定製高階函數?
implicit class SeqWithMyFilter[+T](seq: Seq[T]) {
def myFilter(pred: T => Boolean): Seq[T] = seq.filter(pred)
}
scala> List("x").myFilter(_=="x")
res1: Seq[String] = List(x)
但添加類型的犯規編譯:
implicit class SeqWithMyFilter[+T, +U <: Seq[T]](seq: U) {
def myFilter(pred: T => Boolean): U = seq.filter(pred)
}
...因爲seq.filter(預解碼)總是返回序列...
謝謝,我得到:Seq(「x」)。myFilter(_ ==「x」)error:value myFilter不是Seq的成員[String] – andersbohn
@andersbohn聽起來像它沒有拿起'隱含「在你調用它的地方。 – wheaties
但我只是將它粘貼到REPL中,我的問題中的第一個例子工作正常(使用Seq [T]),但似乎(Repr)沒有與編譯器匹配......我會嘗試修補它,你:) – andersbohn