8

以下が機能しないのはなぜですか?(はい、私は2.9.0finalで作業しており、" -Xexperimental " オプションをオンにしています。)

implicit def any2Dynamic(a: Any) = new Dynamic {
  def applyDynamic(name: String)(args: Any*) = {
    println(a + name)
  }
}

"Say".hello // value hello is not a member of java.lang.String

これがどれほど意味があるかについて議論することができます...これが期待どおりに機能する場合、:または?でどのような優先順位が発生し"Say".toIntますStringLike.toInt(new Dynamic {...}).applyDynamic("toInt")?

4

1 に答える 1

9

コンパイラは、最初にから暗黙的なビューを探しString => { def hello: ? }ます。それは失敗するのでString <: Dynamic. これらは組み合わされていません。

この動的適用機能は最終決定されていません。Scala 2.9.0 では実験的であり、変更される可能性があります。しかし、これが含まれているとは思えません。そのような暗黙の場合、すべての型の安全性を窓から投げ出します。メソッド名のつづりが間違っていたり、引数の型が間違っていたりしても、コンパイル エラーが発生することはありません。あなたのユースケースは何ですか?

于 2011-05-15T14:30:34.830 に答える