Scala案例类和列表
发布时间:2020-12-16 18:25:24 所属栏目:安全 来源:网络整理
导读:我对 Scala完全不熟悉.现在我正在尝试将我在Standard ML中编写的解析器移植到Scala并遇到以下代码的问题: abstract class Tokencase class Zero extends Tokencase class At extends Token//...object Tokenizer { def tokenize(seq : List[Char]) : List[T
我对
Scala完全不熟悉.现在我正在尝试将我在Standard 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需要它,并且它对我提供的类型不满意(它抱怨Zero,At是无效类型,它们应该是代替Token类型).请注意,我还想在解析阶段稍后的时间点匹配令牌列表. 我在网上和stackoverflow本身做了一些搜索,看看之前是否提出了类似的问题(看起来很简单),但不知怎的,我找不到任何东西.我很确定我有一些基本错误,请随时赐教:) 解决方法
如果要创建Zero和At case类的新实例,那么应该使用apply factory方法实例化它们(或新关键字:new Zero),就像这样(在Scala Zero()中将等于Zero.apply() ):
case '0' :: rest => Zero() :: tokenize(rest) 如果你只写零(而不是零()),那么你正在使用Zero类的伴随对象,它是由编译器自动创建的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |