回答
隱Unit
返回類型:
def f() {println("ABC")}
明確Unit
返回類型:從最後的方法表達推斷,仍然Unit
因爲這是println
類型
def g(): Unit = {println("ABC")}
返回類型,但令人困惑:
def h() = println("ABC")
以上所有方法都是等效的。我更喜歡f()
,因爲在方法簽名之後缺少=
運算符就足夠了。當您想額外記錄該方法時,請使用明確的: Unit
。最後一種形式令人困惑,實際上在intellij-idea中被視爲警告。
的=
運營商是至關重要的。如果存在,則意味着:「請返回方法正文中最後一條語句返回」的任何內容。很明顯,你不能在abstract
方法中使用這個語法。如果不是,則假定Unit
。
的程序(方法返回單位)的特殊語法是一個錯誤。不要使用它。對於具有Java/C(++)背景的初學者來說,這是令人困惑和危險的。這是一種不必要的特殊待遇。始終使用等號,不管有沒有類型推斷(後者應僅用於私有成員):
def foo(): Unit = someCodeReturningUnit()
private def bar() = someCodeReturningUnit()
如果你是[風格指南部分](http://docs.scala-lang.org/style/types.html#void_methods)應該更新正確的「不必要的特殊待遇」。 – agilesteel 2012-02-27 09:19:56
@agilesteel關於該部分一直存在爭議。 – 2012-02-27 13:24:22
風格指南[說](http://docs.scala-lang.org/style/declarations#procedure-syntax):「避免使用過程語法,因爲它往往會讓人感到困惑,因爲在簡潔中收穫甚微。」 – 2016-05-17 17:47:19
斯卡拉社區劃分了。一方面,不使用明確的返回類型意味着您可以輕鬆地忘記標記,這會導致通常令人討厭的錯誤跟蹤。另一方面,Unit
- 具有不同語法的返回方法將它們放在一個單獨的類別中,這讓一些人感到高興。
就個人而言,我寧願這句法會消失 - 從失蹤=
產生的誤差惱人的跟蹤。但它甚至沒有被廢棄,所以我寧願利用它,而不僅僅是承受它存在的問題。
所以,使用任何你想。無論哪種方式都會有人批評你的選擇,並且人們讚美它。
- 1. 我的工廠應該用輔助方法返回一個對象還是應該使用原型?
- 2. 方法聲明的返回類型應該是接口還是具體類?
- 3. 我應該返回List還是ArrayList
- 4. 對於返回值的方法,我應該使用wsHttpBinding還是wsDualHttpBinding?
- 5. 我應該使用:懸停CSS僞類還是hover()jQuery方法?
- 6. 我應該還是不應該使用getter和setter方法?
- 7. 在CQRS中,我的閱讀方應該返回DTO還是ViewModels?
- 8. 我應該借用還是複製我的小數據類型?
- 9. iOS:方法返回類型應該是X類的子類
- 10. 我應該使用EventArgs還是簡單的數據類型?
- 11. 爲什麼我應該使用Object而不是DataSet作爲我的WCF方法的返回類型?
- 12. 我應該使用shared_ptr還是返回unique_ptr.get()?
- 13. 我應該返回值還是使用void?
- 14. 我應該使用std :: list還是有更好的方法?
- 15. JavaScript:我應該使用事件的方法還是函數?
- 16. 我應該使用分區還是有更好的方法?
- 17. 我應該在Scala服務中使用Try作爲返回類型嗎?
- 18. 的Tkinter我應該使用tk.Frame還是我自己tk.Frame .__ init__類
- 19. 我的幫助器方法應該返回一個字符還是字符串?
- 20. 捨棄返回的變量
- 21. 我應該使用System.out.println()還是別的?
- 22. Oracle數據類型:我應該使用VARCHAR2還是CHAR
- 23. 我應該使用回調還是應該重寫屬性?
- 24. 以下方法的返回類型應該是什麼?
- 25. WEB API操作方法的返回類型應該是什麼?
- 26. 什麼應該是返回xml字符串的方法的返回類型?
- 27. 返回引用類型的方法返回引用還是克隆副本?
- 28. 返回的類型應該是entityManager symfony
- 29. 我應該返回一個NSMutableString返回NSString的方法
- 30. 我的方法頭文件應該具體說明它的返回類型?
感謝Tomasz。你共享的代碼引發了另一個問題:爲什麼你可以忽略'f'和'g'中的'='符號? – balteo 2012-02-27 08:26:34
如果你的函數返回'Unit',你可以省略'='符號。任何沒有'='符號的函數都會返回'Unit' – Nicolas 2012-02-27 08:32:42
因爲在'Unit'函數中'='是可選的。但是對於所有其他類型,這是強制性的,因爲它們實際上返回了一些東西 – 2012-02-27 08:32:45