T =>ブール型のテストに合格する、T型の要素の配列内の要素の数を数える関数を記述しようとしています。スカラ汎用配列要素
私がこれまで持っていることは次のとおりです。
def countPass[T](elem: Array[T]) = {
var count = 0
for(x <- elem)
x match {
case x: T => count += 1
}
count
}
//TEST
println(countPass[Boolean](Array(true, 52, "test")))
私はエラーのカップルを取得しています、最初のものは次のとおりです。
combinators.scala:45: warning: abstract type pattern T is unchecked since
it is eliminated by erasure
case x: T => count += 1
^
次のエラーは、次のとおりです。
combinators.scala:54: error: type mismatch;
found : Int(52)
required: Boolean
println(countPass[Boolean](Array(true, 52, "test")))
^
combinators.scala:54: error: type mismatch;
found : String("test")
required: Boolean
println(countPass[Boolean](Array(true, 52, "test")))
^
最初のエラーで何が起こっているのか分かりませんが、2番目のエラーではいつでも例外をスローします。私は型Tの要素の量を配列に数えているだけなので、そのようなことは起こりたくありません。
質問:これらの両方のエラーを修正するには、コードをどのようにリファクタリングする必要がありますか?
これは私が最初に持っていたものとは非常に遠く、達成したいものです。しかし、あなたの解決策は、私が配列パラメータの中で 'Any'を使用していたはずであることを認識させました。しかし、最初のエラーでまだ問題が残っています – Phillip
配列には異なる型が含まれているので、 。したがって、 'Array [Any]'を定義する必要があります。 – fcat
import scala.reflect.ClassTagを必ずインポートしてください。さらに、これを読むことができます:https://medium.com/@sinisalouc/overcoming-type-erasure-in-scala-8f2422070d20 – fcat