斯卡拉命名提取例如:斯卡拉命名提取器類具有一個參數
class Foo1(n: Int) {
def isEmpty: Boolean =
false
def get: Foo1 =
this
def _1: Int = n
}
object Foo1 {
def unapply(arg: Foo1) = arg
}
class Foo2(n: Int, nn: Int) {
def isEmpty: Boolean =
false
def get: Foo2 =
this
def _1: Int = n
def _2: Int = nn
}
object Foo2 {
def unapply(arg: Foo2) = arg
}
object Main extends App {
new Foo1(1) match {
case Foo1(n) if n > 0 ⇒ println(n)
}
//Error: value > is not a member of Foo1
//case Foo1(n) if n > 0 ⇒ println(n)
new Foo2(1, 2) match {
case Foo2(n, nn) if n > 0 ⇒ println(s"$n -> $nn")
}
// 1 -> 2
}
我很好奇,爲什麼斯卡拉提取類的實例作爲一個參數(Foo1),但提取參數(foo2的(n,nn)),如果他們的數量> 1。我錯過了什麼或它的意圖行爲?
從
unapply
方法,你可以鴨蛋型的Option[Int]
預期Foo1
返回實例本身我會盡量避免選擇額外的開發 –然後使用get函數直接返回int,如我的答案中所述。 – Harald