gpt4 book ai didi

list - Scala 案例类和列表

转载 作者:行者123 更新时间:2023-12-03 18:27:21 24 4
gpt4 key购买 nike

我对 Scala 完全陌生。现在我正在尝试将我在标准 ML 中编写的解析器移植到 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 中,我不必声明 tokenize() 方法的返回类型,但似乎 Scala 需要它,而且它对我提供的类型不满意(它提示零,At 是无效类型,它们应该是Token 类型)。请注意,我还想在解析阶段的稍后时间点对 token 列表进行模式匹配。

我在网上和 stackoverflow 上做了一些搜索,看看以前是否有人提出过类似的问题(看起来很琐碎),但不知何故我找不到任何东西。我很确定我有一些基本的错误,请随时启发我:)

最佳答案

AtZero是类,而不是对象,因此它们本身不是 Token 的实例.您可以通过更改 case class 来修复您的代码至 case object :

case object Zero extends Token
case object At extends Token

您需要指定函数的返回类型的原因是 Scala 的编译器无法确定递归函数的类型,您可以在这里阅读更多相关信息: Why does Scala require a return type for recursive functions?

关于list - Scala 案例类和列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7069880/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com