爲什麼foldLeft語法運營商的作品,比如我希望這個代碼在Scala中如何實現foldLeft運算符?
(10 /(1〜5))( - + - )
給我一個錯誤「值/:不是Int的成員「。它如何擴展方法/:在類型系統中的所有類型?
爲什麼foldLeft語法運營商的作品,比如我希望這個代碼在Scala中如何實現foldLeft運算符?
(10 /(1〜5))( - + - )
給我一個錯誤「值/:不是Int的成員「。它如何擴展方法/:在類型系統中的所有類型?
這裏是「捷徑」經營者的定義:
def /:[B](z: B)(op: (B, A) => B): B = foldLeft(z)(op)
如果操作者用冒號結束,這是一個右結合。 1 :: Nil
是另外一個例子,對Int
沒有方法::
這一切工作:
(1 to 5)./:(10)(_ + _)
((1 to 5) foldLeft 10)(_ + _)
(幾乎相同的例子, 但在這裏它更明顯,foldLeft居然是方法 範圍對象)(1 to 5).foldLeft(10)(_ + _)
您的問題並不完全清楚(您的表達式中沒有提及n
),但是:以冒號結尾的運算符在右側參數中被解釋爲方法,而不是左側。您的表達式相當於
(1 to 5)./:(10)(_ + _)
其中/:
被更清楚地看到是左側的Range
對象的方法。
::不是一個方法,它是一個具有應用和不適用方法的對象 –
你確定嗎? http://www.scala-lang.org/api/current/index.html#[email protected]::(x:A):List[A] –
我們都是對的,這裏是'::'case類(=>(un)apply):http://www.scala-lang.org/api/current/index.html#scala.collection.immutable.$colon$colon –