Scala奇怪的代码不理解: Visitor[String] ⇒
Scala奇怪的代码不理解: Visitor[String] ⇒
这个问题已经有答案了:
我非常新手Scala,请不要投票。 this: Visitor[Double] ⇒
表达式是什么意思?对我来说看起来像是不完整的代码。我试图在Google上找到这个概念,但由于我不知道这个概念的名称,我无法找到它。
import scala.language.higherKinds trait Expressions { trait TVisitor[T] { def visitConstant(v: Double): T } type Visitor[T] <: TVisitor[T] trait Expression { def accept[T](visitor: Visitor[T]): T } class Constant(val v: Double) extends Expression { def accept[T](visitor: Visitor[T]): T = visitor.visitConstant(v) } trait EvalVisitor extends TVisitor[Double] { def visitConstant(v: Double): Double = v } } trait AddExpressions extends Expressions { class Add(val l: Expression, val r: Expression) extends Expression { def accept[T](visitor: Visitor[T]): T = visitor.visitAdd(l, r) } trait TVisitor[T] extends super.TVisitor[T] { def visitAdd(l: Expression, r: Expression): T } type Visitor[T] <: TVisitor[T] trait EvalVisitor extends super.EvalVisitor with TVisitor[Double] { this: Visitor[Double] ⇒ def visitAdd(l: Expression, r: Expression): Double = l.accept(this) + r.accept(this) } } trait ExtendedExpressions extends AddExpressions with MultExpressions { type Visitor[T] = TVisitor[T] trait TVisitor[T] extends super[AddExpressions].TVisitor[T] with super[MultExpressions].TVisitor[T] object EvalVisitor extends super[AddExpressions].EvalVisitor with super[MultExpressions].EvalVisitor with TVisitor[Double] { this: Visitor[Double] ⇒ } } trait PrefixNotationForExpressions extends ExtendedExpressions { object PrefixNotationVisitor extends super.TVisitor[String] { this: Visitor[String] ⇒ def visitConstant(v: Double): String = v.toString + " " def visitAdd(l: Expression, r: Expression): String = "+ " + l.accept(this) + r.accept(this) def visitMult(l: Expression, r: Expression): String = "* " + l.accept(this) + r.accept(this) } }
admin 更改状态以发布 2023年5月23日