簡體   English   中英

塊體和表達式體函數在 Kotlin 中表現出不同的行為

[英]Block body and expression body functions showing different behaviour in Kotlin

當我使用塊體 function 比較兩個數字時,如果我沒有特別指定返回類型,編譯器會拋出錯誤。 您可以在下面的 function 中看到,如果我沒有將返回類型指定為Boolean ,則會引發錯誤

fun compare(a:Int,b:Int):Boolean
{
    val c= a==b
    return c
}

另一方面,如果我使用表達式主體 function 並且不提及任何返回類型,編譯器不會拋出錯誤並且工作正常。 就像下面的例子

fun compare(a: Int, b: Int) = a == b

這背后的原因是什么。 我知道編譯器會在查看參數類型時嘗試找出返回類型,但這不適用於兩種語法嗎? 為什么兩者的工作方式不同?

答案已經在文檔中提供。 根據 kotlin docs 具有塊體的函數必須始終明確指定返回類型,除非它打算讓它們返回Unit ,在這種情況下它是可選的。 Kotlin 不會推斷具有塊體的函數的返回類型,因為此類函數在主體中可能具有復雜的控制流,並且返回類型對讀者來說是不明顯的(有時甚至對編譯器來說也是如此)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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