エクストラクタでパラメータを暗黙的に変換したいのですが、機能していないようです。この非常に単純なケースを考えてみましょう。
case class MyString(s: String) {}
implicit def string2mystring(x: String): MyString = new MyString(x)
implicit def mystring2string(x: MyString) = x.s
object Apply {
def unapply(s: MyString): Option[String] = Some(s)
}
しかし、私はそれを期待どおりに使用することができません:
val Apply(z) = "a" // error: scrutinee is incompatible with pattern type
String
パラメータをからに変換できない理由を誰かが説明できますMyString
か?私はそれがその場で呼び出すことを期待しstring2mystring("a")
ます。明らかに私はこの問題を回避することができますval Apply(y) = MyString("a")
が、そうしなければならないようには思えません。
注:この質問はこれに似ていますが、1)なぜこれが起こっているのかについて、実際には良い答えがない、2)例は必要以上に複雑です。