[英]scala Does match end in Nil?
我是 Scala 的新手,正在 Scala 閱讀fp 。 本書中有示例代碼,我將其輸入到 Idea 中:
sealed trait mList[+A]
case object mNil extends mList[Nothing]
case class Cons[+A] (head:A, tail:mList[A]) extends mList[A]
object mList {
def sum(ints: mList[Int] ): Int = ints match {
case mNil => 0
case Cons(h, t) => h + sum(t)
}
def apply[A](as: A*): mList[A] =
if (as.isEmpty) mNil
else Cons(as.head, apply(as.tail:_*))
}
然后我收到來自 Idea 的警告,即case Cons(h, t)
無法訪問。
我敢肯定,在這本書中, case Nil
出現在case Cons
之前。 但是當我以這種方式運行代碼時,我總是得到 sum=0。
那么我應該交換兩個案例的順序嗎?
你可以交換案例,但實際上這是沒有必要的。
如果您想引用 object(或其他現有變量),則缺少反引號
def sum(ints: mList[Int]): Int = ints match {
case `mNil` => 0
case Cons(h, t) => h + sum(t)
}
否則,如果沒有反引號mNil
(小寫)是一個新變量模式, case x =>...
即它匹配所有內容。
或者,您可以用大寫字母撥打 object。 那么你不需要反引號
case object MNil extends mList[Nothing]
def sum(ints: mList[Int]): Int = ints match {
case MNil => 0
case Cons(h, t) => h + sum(t)
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.