我是新来的斯卡拉,我正在按照本教程http://docs.scala-lang.org/tutorials/scala-for-java-programmers.html其中有一个案例类的用法的例子。斯卡拉执行抽象类与案例
我试图执行下面的例子:
package classes
abstract class Tree
case class Sum(l: Tree, r: Tree) extends Tree
case class Var(n: String) extends Tree
case class Const(v: Int) extends Tree {
type Environment = String => Int
def eval(t: Tree, env: Environment): Int = t match {
case Sum(l, r) => eval(l, env) + eval(r, env)
case Var(n) => env(n)
case Const(v) => v
}
}
但问题是,我无法执行它,我怀疑的原因是,我不能添加一个主要方法有,因为它是一个类而不是对象。所以,我创建了一个对象与主要方法有:
package classes
object TreeOperations {
type Environment = String => Int //XXX: cannot I import it somehow?
def main(args: Array[String]) {
// evaluating (x+x)+(7+y) expression
val exp: Tree = Sum(Sum(Var("x"), Var("x")),Sum(Const(7), Var("y")))
val env: Environment = { case "x" => 5 case "y" => 7} // x := 5, y := 7
println("Expression: " + exp)
println("Evaluation with x=5, y=7: " + eval(exp, env)) //XXX no eval here
}
}
但后来我注意到两两件事:
我无法访问类型的环境,因为它是一个可依使用类(我试过树。环境,但它没有工作)。
我无法访问eval(...)(以及我试过的)。
所以我想知道什么是解决这些困难的最好方法。
在此先感谢!
我想有一个类/每个文件的对象,即一个Tree.scala,另一个TreeOperations.scala与主要方法,这可能吗? –
是的你可以,只要确保导入相关的类型,即Tree,Sum,...然后'TreeOperations'对象应该包含操作'eval'和类型Environment的定义。我正在更新我的答案。 – Peter
太棒了,谢谢!我不知道我必须导入其他类才能在对象内部访问它。通过这种方式,我可以在我的Tree类中定义所有内容,然后仅将该对象用于主方法,这正是我想要的。非常感谢您的帮助。 –