嗨,我正在學習Scala語言並且有一個問題。我正在讀一本書,其中一個例子說0到2和(0)。到(2)是一樣的。我怎樣才能解釋這個語法?我的意思是,我可以看到這是一個以一個整數值爲參數的函數。但什麼是「(0)」。部分??謝謝在scala中調用函數的語法
0
A
回答
5
在scala中,任何採用單個參數的方法都可以用中綴語法編寫。
因此,舉例來說,如果你有
class Foo(x: Int) {
def add(y: Int) = x + y
}
val a = new Foo(42)
那麼這兩個方法調用是完全等價的
a.add(4) // 46
a add 4 // 46
之所以還有的0
圍繞一個括號的是,在舊版本斯卡拉0.
的由於.
(它既可以是小數點分隔符又可以是方法選擇器)的模糊值,可能會被解釋爲浮點數。由於斯卡拉2.11(或2.10,我不記得了),這已得到修復,所以你現在可以安全地輸入
0.+(2) // Int: 2
,並得到一個Int
回來,而你將不得不在過去Float
,如編譯器會看到它作爲
0.0 + (2) // Float: 2
0
我的意思是,我可以看到,
to
是一個函數,它接受一個整數值作爲參數。
不,它不是一個函數,它是一種方法。
的方法是通過將消息發送到一個對象調用:
foo.bar(baz)
這意味着「與由baz
引用作爲參數由foo
引用的對象的對象發送消息bar
這將反過來導致方法bar
在foo
的類或其祖先之一要被調用。
所以,to
是消息,2
爲參數,並0
是理論值的接收器電子郵件。
斯卡拉允許你使用一個.
或空白的消息發送:
foo bar(baz)
// is the same as
foo.bar(baz)
此外,使用空格時消息發送,可以去掉最後一個參數列表中的括號,如果它只有一個單參數:
foo bar baz
// is the same as
foo bar(baz)
最後,圓括號不僅用於參數列表,它們也用於分組。 (與元組文字,以及)可以總是包圍表達用括號澄清其優先權:
(foo).bar(baz)
// is the same as
foo.bar(baz)
相關問題
- 1. Scala - 方法調用語法
- 2. 令人困惑的Scala高階函數調用語法
- 3. Scala函數調用
- 4. 在Scala中調用內部函數
- 5. Scala方法和函數語法概述
- 6. 函數調用語法?
- 7. JavaScript語法,在函數調用/構造函數前面調用
- 8. 從nodejs調用Scala函數
- 9. matlab調用scala函數
- 10. Scala:動態調用函數
- 11. C語法中調用函數
- 12. 語法錯誤在函數調用
- 13. 回調函數的語法
- 14. 語義背後_ Scala的方法調用
- 15. 作爲使用scala語法的參數的函數
- 16. 的UIWebView調用javascript函數的語法
- 17. 調用scala方法中的函數時意外的結果
- 18. scala中構造函數的用法
- 19. 在VB函數調用中正確的參數語法
- 20. 自調用函數的替代語法?
- 21. 奇怪的函數調用像語法
- 22. 語法錯誤時調用的函數
- 23. 語法函數[T]在scala中意味着什麼
- 24. 在scala中構造函數定義語法需要說明
- 25. Scala使用部分應用程序的匿名函數語法?
- 26. PHP在外部文件中調用類中的函數,語法?
- 27. Scala構造函數中的函數不會被調用
- 28. 通過Scala中的隱式函數調用函數
- 29. 編寫調用scala中泛型函數的泛型函數
- 30. Scala函數調用中的隱式函數
此外,整數和其他原始類型被自動轉換爲等效的對象類型。值「0」是一個整數,並自動轉換爲「Int」。 'Int'有一個方法'to()',它接受一個整數參數。 – 2014-09-05 23:21:59
@Bob,這是另一種方式。 'Int'是一個對象類型,然後在底層JVM中用一個原語表示。在2.10中棄用 – 2014-09-05 23:25:54
,在2.11中新的行爲。差異在'val i = 0;'以前是雙重的,但現在是錯誤。 – 2014-09-06 02:06:18