[英]Scala - Function's implicit return type
我是scala的新手,對函數定義和默認返回類型有些疑問。
這是一個函數定義:
def wol(s: String) = s.length.toString.length
提示說是:
wol:(s:String)Int
但是,代碼沒有明確指定返回類型,因此不應將其默認為Unit
,這在Java中意味着void
。
那么,Scala函數的默認返回類型的規則是什么?
函數中的返回類型實際上是函數中最后一個表達式的返回類型。 在這種情況下,它是一個Int
,因為#length
返回一個Int。
這是編譯器在嘗試推斷類型時所做的工作。 如果未指定類型,則會自動推斷出類型,但不一定是Unit
。 您可以強迫它聲明如下:
def wol(s: String): Unit = s.length.toString.length
編輯[語法糖樣品]
我只是想起了一些可能與您以前的信念有關的事情。 當您定義一個方法而未指定其返回類型且未放置=
符號時,編譯器將強制返回類型為Unit。
def wol(s: String) {
s.length.toString.length
}
val x = wol("") // x has type Unit!
IntelliJ實際上會警告您並給出提示“ Useless expression
。 在后台,這里的#wol
函數被轉換為類似以下內容:
// This is actually the same as the first function
def wol(s: String): Unit = { s.length.toString.length }
無論如何,作為最佳實踐,請嘗試避免使用此語法,並始終選擇放置=
符號。 此外,如果定義公共方法,請嘗試始終指定返回類型。
希望有幫助:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.