8
我想要一个提取器隐式转换其参数,但它似乎不工作。考虑这个非常简单的例子:斯卡拉 - 隐式转换与未应用
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")
解决这个问题,但似乎我不应该这样做。
注意:这个问题类似于this one,但1)人们为什么会发生这种情况并没有很好的答案,2)这个例子比它需要的更复杂。
感谢。这有点令人失望。你知道这个决定的动机是什么吗? – dhg
是的,添加'def unapply(p:String):Option [String] =一些(p)'到'Apply'就可以做到这一点。所以我会去那。谢谢。 – dhg
@dhg我编辑了答案 - 一个视图绑定似乎也起作用。 –