1
スカラ未適用メソッドを理解しようとしています。Scala未適用メソッド
以下は私の理解です。
val temp = Person.unapply(new Person("Magic", "Mike"))
if (temp != None) { val (x, y) = temp.get }
else { <go to next case> }
が、私は以下のように持っていたときにどのように適用を解除する作業の下に行われます:
new Person("Magic", "Mike") match {
case Person("Harold", y) => s"Last Name is ${y}"
case Person("Magic", y) => s"Last Name is ${y}"
case _ => "Unknown"
}
class Person(val fname: String, val lname: String)
object Person{
def unapply(x: Person) : Option[(String, String)] =
Some(x.fname,x.lname)
}
new Person("Magic", "Mike") match {
case Person(x, y) => s"Last Name is ${y}"
case _ => "Unknown"
}
この私はケースのようなものを呼び出し推測:私はPersonオブジェクトを持っている場合は言いますそれはunapplyメソッドでfname( "Magic")の値にどのようにアクセスし、最初のものと同じ/正しい結果を返しますか?
それは魔法です!真剣に、 "それがどのように動作するか"についてはあまり理解できません。 Scalaコンパイラは 'Person(foo、bar)'を見て、それを適切な引数で 'Person.unapply'への呼び出しで置き換え、戻り値を検査し、与えられた変数に値を割り当てるか、または与えられた定数と一致させます。 – Dima