文字列からオブジェクトを抽出する抽出機能を持っています。パターンマッチングと部分関数の適用外関数の相違点
case class ItemStructure(id: String, data: String)
object ItemStructure {
def unapply(str: String): Option[ItemStructure] = {
str.split('-').toList match {
case List(id, data) => Some(ItemStructure(id, data))
case _ => None
}
}
}
パターンマッチングでこのエクストラクタを使用しようとすると、すべて正常に動作します。
"" match {
case ItemStructure(item) =>
}
また、匿名関数と一致するパターンでも動作します。私は部分的な機能で、この抽出器を使用しようと
Option("").map {
case ItemStructure(item) =>
}
は今、コンパイラはメッセージで失敗します。私は、適用を解除する機能があるコンパニオンオブジェクトの名前を変更する場合は適用を解除する
val func: PartialFunction[Any, Unit] = {
case ItemStructure(item) =>
}
過負荷に解決することはできませんそれからすべてが期待どおりに動作します。
コンパニオンオブジェクトに含まれていると抽出が機能しない理由を誰かが説明できますか?
最後の例が両方の未適用メソッドにどのように適合しているか理解できませんでした。あなたもそれを説明できますか? – fcat
@fcat型がStringの場合、 'unapply(ItemStructure)'は決してマッチできないので、考慮する必要はありません。型が 'ItemStructure'の場合、' unapply(String) 'は決してマッチできません。型が 'Any'の場合、' Any'は 'ItemStructure'か' String'である可能性があるので、どちらも一致します。 – sepp2k
私は最後のもののタイプが 'Any'であることを知りません。説明ありがとう! – fcat