Я бы хотел, чтобы экстрактор неявно преобразовывал свои параметры, но, похоже, он не работает.Рассмотрим очень простой случай:
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) пример более сложный, чем должен быть.