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