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

scala – 从对象中的main方法调用case类

发布时间:2020-12-16 18:03:48 所属栏目:安全 来源:网络整理
导读:在以下课程中: package patternmatchingabstract class Expr { case class Var(name: String) extends Expr case class Number(num: Double) extends Expr case class UnOp(operator: String,arg:Expr) extends Expr case class BinOp(operator: String,lef
在以下课程中:

package patternmatching

abstract class Expr {

  case class Var(name: String) extends Expr
  case class Number(num: Double) extends Expr
  case class UnOp(operator: String,arg:Expr) extends Expr
  case class BinOp(operator: String,left: Expr,right: Expr) extends Expr


}

我将主类定义为:

package patternmatching
import patternmatching.Expr.Var

object PatternMain {

      def main(args:Array[String]) {

         val v = Var("x")
    }

}

但是我在行导入patternmatching.Expr.Var的PatternMain中收到编译时错误:

  • object Expr is not a member of package patternmatching Note: class Expr exists,but it has no companion object.

如何针对案例类Var正确调用val v = Var(“x”)?我没有正确导入它吗?

解决方法

删除abstract关键字并将类Expr转换为对象Expr.就你的代码而言,我认为没有理由不做这些改变.

但是,如果你确实想让Expr成为一个抽象类,你将不得不扩展并实例化它:

def main(args:Array[String]) {
    val expr = new Expr {} // extending the class - this creates a anonymous class
    val v = expr.Var("x")

    // alternatively,since now we do have a object to import
    import expr._
    val v2 = Var("x")

    // even another approach,now using a named class
    class MyExpr extends Expr
    val myexpr = new MyExpr
    val v3 = myexpr.Var("x")
}

说明:

>只有对象和包可以导入其成员>必须扩展抽象类才能实例化.这里的想法是,类中的一些“point(s)”需要由客户端定义,同时仍然与抽象类的其他扩展共享其余的接口.

(编辑:李大同)

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

    推荐文章
      热点阅读