scala – 无法在抽象类中导入案例类
发布时间:2020-12-16 09:53:01 所属栏目:安全 来源:网络整理
导读:我想在下面运行Expr类.我从 http://andymaleh.blogspot.ie/2008/04/scalas-pattern-matching-visitor-pattern.html开始使用此代码 这是我正在尝试的: import Expr.Sumobject Main { def main(args:Array[String]) { var expr1 = new Sum(new Num(1),new Pro
我想在下面运行Expr类.我从
http://andymaleh.blogspot.ie/2008/04/scalas-pattern-matching-visitor-pattern.html开始使用此代码
这是我正在尝试的: import Expr.Sum object Main { def main(args:Array[String]) { var expr1 = new Sum(new Num(1),new Prod(new Num(2),new Num(3))) print(expr1) } } abstract class Expr { case class Num(n: Int) extends Expr case class Sum(l: Expr,r: Expr) extends Expr case class Prod(l: Expr,r: Expr) extends Expr def evalExpr(e: Expr): Int = e match { case Num(n) => n case Sum(l,r) => evalExpr(l) + evalExpr(r) case Prod(l,r) => evalExpr(l) * evalExpr(r) } def printExpr(e: Expr) : Unit = e match { case Num(n) => print(" " + n + " ") case Sum(l,r) => printExpr(l); print("+"); printExpr(r) case Prod(l,r) => printExpr(l); print("x"); printExpr(r) } } 但行 import Expr.Sum 导致编译时错误:’not found:object Expr’.如何导入Expr类? 解决方法
您只能导入实例的成员.所以你的代码是:
object Main { def main(args:Array[String]) { val expr = new Expr {} // now we have a instance. import expr._ var expr1 = new Sum(new Num(1),new Num(3))) print(expr1) } } 一个简单的例子解释了为什么你不能导入非实例成员: class A(val x:Int) { object Print { def print = println(x) } } 如果你可以导入A.Print,哪个值会绑定到x?现在如果我们这样做: val a = new A(5); // we have a value bound to x. import a._ Print.print 这是一个原因.另一个原因是新的A(5).Print!= new A(5).Print,不仅在相等方面,而且在类型中:val(a1,a2)=(new A(5),new A(5) );含蓄地[a1.Print<:< a2.Print]不会编译.这就是Scala所谓的路径依赖类型. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |