1
消除返回類型考慮下面的Scala代碼片段:通過擦除斯卡拉
def func(param: Any): Int = param match {
case f: (String => Int) => f("apple")
case i: Int => i
}
println(func((s: String) => s.length))
正常工作,但是,在編譯時,我得到以下警告:
<console>:11: warning: non-variable type argument String in type pattern String => Int is unchecked since it is eliminated by erasure
case f: (String => Int) => f("apple")
我怎樣才能擺脫此警告訊息?
感謝您的幫助提前!
感謝您的解釋和鏈接!我試圖解決警告但失敗。現在我對'TypeTag'的含義有了一個理論上的認識,而且我知道'case f:((_)=>(_))=>'不會抱怨。但是,在後一種情況下,'f(...)'會導致編譯器錯誤。請您這麼友好地給我一些進一步的提示如何繼續?謝謝! –
用代碼片段更新。 – yw3410
感謝您的解釋性代碼!它確實更精確,因爲我們現在可以區分String => Int和Int => String。我已經嘗試過了,但不幸的是現在有兩次同樣的警告。 我嘗試了以下方法:'type oneParamFuncType = _ => _',並且在兩種情況下都使用'case f:oneParamFuncType ...',但是,這會導致函數調用時發生編譯器錯誤。如果沒有函數調用,編譯器會很高興。你有沒有想法如何將通用'oneParamFuncType'轉換爲特定的? –