加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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类的伴随对象,它是由编译器自动创建的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读