저는 스칼라를 처음 접했고 사례 클래스 사용 예제 인 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
}
}
그러나 나는 두 가지 발견 :
나는 그것이 differnent 클래스 (나는 나무를 시도하기 때문에 환경 입력에 대한 액세스를 얻을 수 있습니다. 환경 그러나 그것은 작동하지 않았다).
eval (...)에 대한 액세스 권한을 얻을 수 없습니다 (동일한 시도).
그래서 나는 이러한 어려움을 해결하는 가장 좋은 방법이 무엇인지 알고 싶었습니다.
미리 감사드립니다.
하나 개의 클래스/파일 당 객체, 즉 하나 Tree.scala 및 주요 방법으로 다른 TreeOperations.scala이 가능, 내가하고 싶은입니까? –
예, Tree, Sum, ...과 같은 관련 유형을 가져올 수 있습니다. 'TreeOperations' 객체는'eval' 작업과 환경 유형 정의를 포함해야합니다. 나는 내 대답을 업데이트하고있다. – Peter
정말 고마워! 고마워! 나는 다른 클래스를 객체 내부에서 접근 할 수 있도록 가져와야한다는 것을 알지 못했다. 이 방법으로 Tree 클래스의 모든 것을 정의한 다음 주 메서드에 대해서만 개체를 사용할 수 있습니다.이 메서드는 정확히 내가 원했던 것입니다. 당신의 도움을 주셔서 대단히 감사합니다. –