我對Scala完全陌生。現在,我試圖端口分析器我在標準ML寫信給Scala和具有下面的代碼的問題:Scala案例分類和列表
abstract class Token
case class Zero extends Token
case class At extends Token
//...
object Tokenizer {
def tokenize(seq : List[Char]) : List[Token] = seq match {
case List() => error("Empty input")
case '0' :: rest => Zero :: tokenize(rest)
case '@' :: rest => At :: tokenize(rest)
//...
}
}
在SML我就不必申報記號化的返回類型()方法但似乎Scala需要它,它對我提供的類型不太滿意(它抱怨Zero,At是無效類型,而且它們應該是類型Token)。請注意,我還希望在解析階段在稍後的時間點匹配令牌列表。
我做了一些在網上搜索和stackoverflow本身,看看是否有類似的問題之前已經提出(它看起來很瑣碎),但不知何故我找不到任何東西。我很確定我有一些基本的錯誤,請隨時開導我:)
作爲scala自己新手,我想知道爲什麼它不能在這種情況下編譯?你是否說你不能使用(自動生成的)伴侶對象進行模式匹配?如果是這樣,爲什麼不呢? – Droggl
@Droggl:當你在模式匹配中使用'Zero'時,將會使用'Zero.unapply(...)'方法(它也會自動生成case類的伴隨對象),所以你可以* *在模式匹配中使用'Zero'。問題是伴侶對象不會擴展'Token'類 - 只有'Zero' ** class **擴展它。所有'List'的所有元素都應該是'Token'類。 – tenshi