0

このscalaコードをコンパイルしようとしていますが、次のコンパイラ警告が表示されます。

scala> val props: Map[String, _] = 
 |   x match {
 |     case t: Tuple2[String, _] => {
 |       val prop =
 |       t._2 match {
 |         case f: Function[_, _] => "hello"
 |         case s:Some[Function[_, _]] => "world"
 |         case _ => t._2
 |       }
 |     Map(t._1 -> prop)
 |   }
 |   case _ => null
 | }
<console>:10: warning: non-variable type argument String in type pattern (String, _) is unchecked since it is eliminated by erasure
       case t: Tuple2[String, _] => {
               ^
<console>:14: warning: non-variable type argument _ => _ in type pattern Some[_ => _] is unchecked since it is eliminated by erasure
           case s:Some[Function[_, _]] => "world"
                  ^

Scalaで型消去を回避するにはどうすればよいですか?または、コレクションのtypeパラメーターを取得できないのはなぜですか?これと同じ問題を指摘しているようです。しかし、私はこの特定の状況で解決策を推測することができませんでした。

4

2 に答える 2

4

case t @ (_: String, _)の代わりに、case t: Tuple2[String, _]およびcase s @ Some(_: Function[_, _])の代わりに使用しcase s:Some[Function[_, _]]ます。

Scalaはmatch型パラメーターを使用できません。

于 2013-02-14T06:56:11.257 に答える
2

私はそれを次のように書き直します:

x match {
  case (name, method) => {
    val prop =
      method match {
        case f: Function[_, _] => "hello"
        case Some(f: Function[_, _]) => "world"
        case other => other
      }

    Map(name -> prop)
  }
  case _ => null
}
于 2013-02-14T07:29:45.000 に答える