2012-07-28 61 views
0

可能重複:
How does Scala's apply() method magic work?斯卡拉 - 運營商定義

我在斯卡拉絕對初學者,在Scala的一本書看完後適用的功能就像是「過載()運營商「我開始懷疑tha是如何定義的。即運算符()將在括號本身之間採用參數,而不是在常規中綴a()b表示法中。在Scala中可以定義這樣的運算符,如果是這樣,定義語法是什麼?謝謝。

回答

3

正如您已經在您的問題中所述,您只需通過定義名爲apply的方法(而不是函數)來定義它。

foo(bar, baz) 

被翻譯成

foo.apply(bar, baz) 

所以,只要foo具有正確的參數數量和類型的apply方法,這將工作。

apply方法的實現方式的一些實例是Array同伴對象,這可以構建通過調用Array(1, 2, 3)陣列(實際上是隻是Array.apply(1, 2, 3))和Array類,它允許通過調用訪問的數組元素anArray(i)(實際上只是anArray.apply(i))。

這與例如Python,其中函數調用被轉換爲對__call__運算符或Ruby的調用,其中形式爲foo.(bar, baz)的表達式被轉換爲foo.call(bar, baz)

類似的方法是update

foo(bar) = baz 

被翻譯成

foo.update(bar, baz) 
+0

好的,謝謝。我可以定義一個運營商嗎? – Bober02 2012-07-28 23:30:35

+0

對不起,我的意思是我可以定義運算符/?這將作爲a/b?,類似於()? – Bober02 2012-07-28 23:31:49

+0

是的,當然可以。而且,順便說一句,如果你自己嘗試一下,你會花費更少的時間,而不是問這個問題。 – 2012-07-28 23:33:43