gpt4 book ai didi

Scala 抽象类

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

我是 scala 新手,我不知道如何调用抽象类来创建所需的对象。任何帮助都会很棒

abstract class Expr{
case class Number(n:Double) extends Expr
case class Sum(e1:Expr, e2: Expr) extends Expr
case class Subtract(e1: Expr, e2: Expr) extends Expr
case class Divide(e1: Expr, e2: Expr) extends Expr
case class Abs(e1: Expr) extends Expr
case class Mod(e1: Expr, e2: Expr) extends Expr
def eval(e:Expr): Double = e match{
case Number(n) => n;
case Sum(e1,e2) => eval(e1) + eval(e2);
}
}
object main{
def main(args: Array[String]) {
val e = Expr();
println("hello");
}
}

所以我希望能够创建 Expr 对象并对其使用 eval 。谢谢。

最佳答案

您可以通过添加 {} 来实例化 Expr 以指示空类主体。所以如果你这样写,你的代码就会工作

val e = Expr() {};
val n = e.Number(1.0);
val sum = e.Sum(n, n);
println(e.eval(sum));

但我不明白为什么 case 类必须驻留在 Expr 类中。为什么不写这样的东西:

abstract class Expr {}

object Eval {
def apply(e : Expr) = e match{
case Number(n) => n;
case Sum(e1,e2) => Eval(e1) + Eval(e2);
}
}

case class Sum(e1 : Expr, e2 : Expr) extends Expr

然后你可以更好地引用它们:

Eval(Sum(Number(1), Number(1)))

关于Scala 抽象类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13531622/

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