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我編輯了答案 - 一個視圖綁定似乎也起作用。 –