我在執行程式時得到了以下錯誤....,有誰能幫我解決這個問題,因為我是scala新手,我需要用遞回來做哪些改變?
type mismatch。
發現 : Any
需要。Array[Any]
array11(arr(acc),0)
下面是我的代碼
object arr11{
def main(args: Array[String])。) Unit = {
array11(Array(Array(1, 2, 11),0) ,0)
}
def array11(arr: Array[Any],acc:Int) :Unit = {
if(arr(acc).isInstanceOf[Array[Any]>)
{
array11(arr(acc),0)
}
}
uj5u.com熱心網友回復:
看一下函式array11:
def array11(arr: Array[Any], acc: Int):Unit = {
if(arr(acc).isInstanceOf[Array[Any]>) {
array11(arr(acc),0)
}
}
array11需要兩個引數,首先--arr的型別應該是Array[Any],但是在行中:
array11(arr(acc), 0)
arr(acc)將具有Any型別(因為arr是Any的Array),而你試圖將Any型別的物件作為Array[Any]來傳遞,編譯器會向你顯示錯誤。型別不匹配。
為了使你的代碼對編譯器來說是正確的,你應該將arr(acc)轉換為Array[Any]型別,例如使用asInstanceOf:
def array11(arr: Array[Any], acc: Int)。) Unit = {
if(arr(acc).isInstanceOf[Array[Any]>) {
array11(arr(acc).asInstanceOf[Array[Any]], 0)
}
}
但是在這種情況下,你的代碼的型別安全度很低,你應該盡可能地擺脫在簽名中使用Any型別。同樣,使用asInstanceOf也是一種不好的做法,原因也是如此。我建議你重構你的array11函式,使其更加型別安全。
uj5u.com熱心網友回復:
即使你做了if (x.isInstaceOf[X]),編譯器仍然不認為x的型別是X,它仍然是和if之前一樣。這在某些語言中是不同的,比如Kotlin。在Scala中,如果你想做這樣的事情,你可以使用模式匹配:
def array11(arr: Array[Any],acc:Int) :Unit = {
arr(acc) match {
case aa: Array[Any] =>
array11(aa,0)
case _ =>
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/309125.html
標籤:
