簡體   English   中英

scala 匹配是否以 Nil 結束?

[英]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)
}

scala 中的反引號有什么用

需要澄清 Scala 文字標識符(反引號)

為什么 Scala 中的模式匹配不適用於變量?

非文字值的模式匹配

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM