我是Scala的新手,在阅读ScalaTutorial.pdf第6节:案例类和模式匹配
时我找不到有关如何运行其示例的信息:
package my
abstract class Tree
case class Sum(l: Tree, r: Tree) extends Tree
case class Var(n: String) extends Tree
case class Const(i: Int) extends Tree
object TestTree {
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
}
def main(args: Array[String]){
val s : Sum = Sum(Var("x"), Const(10))
// Then how to define a variable of type environment to pass it to the `eval` function:
//eval(s, Environment) ??
}
}
我不知道如何将环境传递给eval
函数
答案 0 :(得分:1)
type Environment = String => Int
这表示类型Environment
等于String => Int
类型,即采用String
并返回Int
的函数类型。应该注意的是,在Scala中,地图是一种函数(也就是说Map[K,V]
是K => V
的子类型。因此,任何将函数作为参数的函数也可以采用映射。
因此,要使用eval
,您可以向其传递类型为String => Int
的函数,该函数可能是您定义的实际函数,它接受一个字符串并返回一个int,或者一个映射的映射字符串到整数。