簡體   English   中英

Scala-函數的隱式返回類型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM