Решите некоторое уравнение в Scala, используя сопоставление с образцом - PullRequest
1 голос
/ 12 февраля 2012

Я очень новичок в 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 Ответ

1 голос
/ 12 февраля 2012
type Environment = String => Int

Это говорит о том, что тип Environment равен типу String => Int, то есть типу функций, которые принимают String и возвращают Int. Следует отметить, что в Scala карта является своего рода функцией (то есть Map[K,V] является подтипом K => V). Таким образом, любая функция, которая принимает функцию в качестве аргумента, также может вместо этого взять карту.

Таким образом, чтобы использовать eval, вы можете передать ему функцию типа String => Int, которая может быть либо фактической функцией, которую вы определили, и которая принимает строку и возвращает целое число, либо картой, которая отображает строки в целые числа.

...