2012-02-27 43 views

回答

46

Unit返回類型:

def f() {println("ABC")} 

明確Unit返回類型:從最後的方法表達推斷,仍然Unit因爲這是println類型

def g(): Unit = {println("ABC")} 

返回類型,但令人困惑:

def h() = println("ABC") 

以上所有方法都是等效的。我更喜歡f(),因爲在方法簽名之後缺少=運算符就足夠了。當您想額外記錄該方法時,請使用明確的: Unit。最後一種形式令人困惑,實際上在中被視爲警告。

=運營商是至關重要的。如果存在,則意味着:「請返回方法正文中最後一條語句返回」的任何內容。很明顯,你不能在abstract方法中使用這個語法。如果不是,則假定Unit

+0

感謝Tomasz。你共享的代碼引發了另一個問題:爲什麼你可以忽略'f'和'g'中的'='符號? – balteo 2012-02-27 08:26:34

+2

如果你的函數返回'Unit',你可以省略'='符號。任何沒有'='符號的函數都會返回'Unit' – Nicolas 2012-02-27 08:32:42

+1

因爲在'Unit'函數中'='是可選的。但是對於所有其他類型,這是強制性的,因爲它們實際上返回了一些東西 – 2012-02-27 08:32:45

14

的程序(方法返回單位)的特殊語法是一個錯誤。不要使用它。對於具有Java/C(++)背景的初學者來說,這是令人困惑和危險的。這是一種不必要的特殊待遇。始終使用等號,不管有沒有類型推斷(後者應僅用於私有成員):

def foo(): Unit = someCodeReturningUnit() 

private def bar() = someCodeReturningUnit() 
+1

如果你是[風格指南部分](http://docs.scala-lang.org/style/types.html#void_methods)應該更新正確的「不必要的特殊待遇」。 – agilesteel 2012-02-27 09:19:56

+0

@agilesteel關於該部分一直存在爭議。 – 2012-02-27 13:24:22

+0

風格指南[說](http://docs.scala-lang.org/style/declarations#procedure-syntax):「避免使用過程語法,因爲它往往會讓人感到困惑,因爲在簡潔中收穫甚微。」 – 2016-05-17 17:47:19

6

斯卡拉社區劃分了。一方面,不使用明確的返回類型意味着您可以輕鬆地忘記標記,這會導致通常令人討厭的錯誤跟蹤。另一方面,Unit - 具有不同語法的返回方法將它們放在一個單獨的類別中,這讓一些人感到高興。

就個人而言,我寧願這句法會消失 - 從失蹤=產生的誤差惱人的跟蹤。但它甚至沒有被廢棄,所以我寧願利用它,而不僅僅是承受它存在的問題。

所以,使用任何你想。無論哪種方式都會有人批評你的選擇,並且人們讚美它。

相關問題