使用模式匹配在scala中求解一些方程

时间:2012-02-11 21:18:22

标签: scala pattern-matching

我是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函数

1 个答案:

答案 0 :(得分:1)

type Environment = String => Int

这表示类型Environment等于String => Int类型,即采用String并返回Int的函数类型。应该注意的是,在Scala中,地图是一种函数(也就是说Map[K,V]K => V的子类型。因此,任何将函数作为参数的函数也可以采用映射。

因此,要使用eval,您可以向其传递类型为String => Int的函数,该函数可能是您定义的实际函数,它接受一个字符串并返回一个int,或者一个映射的映射字符串到整数。