Ekstraktörü parametrelerini örtük olarak çevirmeyi tercih ediyorum, ancak işe yaramıyor gibi görünüyor. Bu çok basit bir durum düşünün:Scala - uns undes ile kapalı dönüşüm
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)
}
Ama beklediğiniz gibi onu kullanmak mümkün değilim:
val Apply(z) = "a" // error: scrutinee is incompatible with pattern type
kimse o String
den MyString
parametreyi dönüştürmek için başarısız neden açıklayabilir misiniz? Anında string2mystring("a")
aramasını beklerdim. Açıkça ben bu konu etrafında val Apply(y) = MyString("a")
söyleyerek çalışabilirim, ama bunu yapmak zorundayım gibi görünmüyor.
Not: Bu soru this one'a benzer, ancak 1) bunun neden olduğuna dair gerçekten iyi bir cevabı olmadığını, 2) örnek olması gerekenden daha karmaşıktır.
teşekkür ederiz. Bu biraz hayal kırıklığı yaratıyor. Bu karar için motivasyonun ne olduğunu biliyor musun? – dhg
Evet, "unapply def" (p: String) eklensin: Seçenek [String] = Bazı (p) 'to' Apply' hile yapar. Ben de onunla gideceğim. Teşekkürler. – dhg
@dhg Cevabı düzenledim - bir görünüm de işe yarıyor gibi görünüyor. –