![](/img/trans.png)
[英]What return type should a Scala method have if it can throw/return errors but has Unit return type?
[英]Should I use Unit or leave out the return type for my scala method?
我不確定將Unit指定為我的scala方法的返回類型或完全省略返回類型之間的區別。 有什么不同?
任何人都可以建議嗎?
隱式Unit
返回類型:
def f() {println("ABC")}
顯式Unit
返回類型:
def g(): Unit = {println("ABC")}
返回類型從最后一個方法表達式推斷出來,仍為Unit
因為這是println
的類型,但令人困惑:
def h() = println("ABC")
上述所有方法都是等效的。 我更喜歡f()
因為單獨使用方法簽名后缺少=
運算符對我來說已經足夠了。 當您想要額外記錄方法時,請使用explicit : Unit
。 最后一種形式令人困惑,實際上被視為intellij-idea中的警告。
=
運算符至關重要。 如果它存在,則表示:“ 請返回方法體中最后一個語句返回的內容 ”。 顯然,您不能將此語法用於abstract
方法。 如果不是,則假設Unit
。
過程的特殊語法(返回Unit的方法)是一個錯誤。 不要使用它。 對於具有Java / C(++)背景的初學者來說,這是令人困惑和危險的。 這是一種不必要的特殊待遇。 始終使用等號,有和沒有類型推斷(后者應該只用於私人成員):
def foo(): Unit = someCodeReturningUnit()
private def bar() = someCodeReturningUnit()
Scala社區對此有所分歧。 一方面,不使用顯式返回類型意味着您可以輕松忘記=
符號,這會導致通常很難跟蹤的錯誤。 另一方面,具有不同語法的Unit
返回方法將它們放在一個單獨的類別中,這讓一些人感到滿意。
就個人而言,我寧願這句法會消失-從缺失所造成的誤差=
惱人跟蹤。 但它甚至都沒有被棄用,所以我寧願利用它而不僅僅是遭遇它存在的問題。
所以,使用你想要的任何東西。 無論是哪種方式都會批評你的選擇,人們無論如何都會贊美它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.