我對scala函數相對來說比較陌生,我對這個語法糖是如何工作的以及何時使用特定類型感到困惑。Scala:沒有參數的函數
我已經寫了3個功能都應該做同樣的事情,但我有爲什麼Function0的表現不同
版本1
val fn1 : (String) => String = System.getProperty(_)
println(fn1("os.name"));
版本2
val fn2 :() => String = System.getProperty("os.name")
println(fn2());
理解問題
版本2給出類型不匹配;發現:需要字符串:()⇒字符串
版本3
val fn3 =() => System.getProperty("os.name")
println(fn3());
我明白,版本2階已經知道System.getProperty的返回類型,但它爲什麼產生特定的錯誤,爲什麼它阻止我明確聲明返回類型。我個人更喜歡明確的返回類型,所以我不必深入一種方法來查看它返回的內容。
對不起,對於拉特如果第二個函數被解釋爲「一個值,這是一個不帶參數並返回一個字符串的函數,則對此做出響應。不會以類似的方式讀取第一個函數,即返回一個接受字符串並返回字符串的函數。相反,編譯器會發現你反對返回一個字符串而不是一個函數。 – Asrar