我已閱讀Difference between method and function in Scala和許多關於方法和功能差異的文章。我感覺'方法'只是一個被定義爲類,特質或對象中方法的「命名函數」。一個'函數'代表這些文章中的「匿名函數」或「函數文字」或「函數對象」之類的東西。一個證據可以在Scala編程http://www.artima.com/shop/programming_in_scala_2ed,第141頁第8.1節中找到,「定義函數的最常見方法是作爲某個對象的成員,這樣的函數稱爲方法。」命名方法和命名函數的定義是什麼?
但是,當我檢查斯卡拉語言參考http://www.scala-lang.org/docu/files/ScalaReference.pdf時,有像命名方法的概念。在頁91,第6.20節返回表達式:「一個返回表達式返回e必須發生在一些名爲 方法或函數的正文內部。」您也可以在同一頁面和其他地方找到術語「命名的功能」。
所以我的問題是,在斯卡拉,方法,命名方法和命名函數是指同一個概念?你在哪裏得到命名函數的定義?
在代碼List(1, 2).map(_ + 1)
中,原始表達式_ + 1
是一個命名方法,然後將該方法轉換爲函數。什麼樣的函數,匿名函數,函數對象,命名函數?在我的理解,斯卡拉只有兩種類型的函數:一個命名函數是一種方法;一個函數文字的匿名函數。函數文字被編譯到特徵函數N的函數對象中,以便它在純粹的面向Scala的面向對象世界中使用。
但是,對於上述代碼中的常規命名函數/方法(例如_ + 1
),爲什麼Scala會將其轉換爲另一個函數對象?
函數 - >方法轉換是不可避免的,所討論的方法是在函數類中定義的「應用」。非常像我的原始拳擊比喻:) –
我會說不同:每個函數*代表一個函數類的實例上定義的'apply'方法。這裏沒有轉換,這就是函數的定義。另一方面,將一個方法轉換爲一個函數實際上是分配和構建新的東西。 –
我問過這個問題,因爲方法和函數的混合使我困惑 - 是一種函數方法嗎?或命名的功能?或者根本不是功能?這個答案使用了最後一個定義,即一個方法不是一個函數。這個定義在Scala語言規範中是不成立的(參見上面的問題)。這是我試圖澄清的事情。 – Ying