3

可能重复:
Scala 中的“eval”

Subramaniam 博士在他的演讲http://www.youtube.com/watch?v=LH75sJAR0hc在 30 分钟开始谈论 Scala 中的函数式风格时,他给出了这个例子

class Car {
  def turn(direction: String) = {
    println("turning " + direction)
  }
}

val car = new car
car turn "left"

然后他说可以从数据文件中读取最后一行并进行评估。所以,数据变成代码,代码变成数据。

Scala 如何支持这一点?它有eval功能吗?

4

1 回答 1

1

几乎每一种语言都支持一个eval函数(即使是像 Haskell 这样的强静态类型语言)。许多为主要通过字节码解释实现的语言(例如类 Lisp 语言、Erlang 或 Java)构建的语言运行时支持在运行时插入新(字节)代码的能力。

一旦可以动态插入新代码,就可以编写 eval

Scala 就是这种语言的一个例子,其中JVM 在运行时可用

即使在没有特定支持完整元编程甚至动态链接的语言实现中,通常也有一些方法可以在程序员的控制下动态生成代码,或者通过反射机制或代码生成支持库(例如 LLVM)。

除了简单的单阶段评估之外,更一般地说,支持多阶段计算的语言允许生成从一个阶段到下一个阶段的程序,用于任意数量的阶段,从而可以安全、任意地嵌套评估。

背景阅读

  • McCarthy,John,LISP 的历史,SIGPLAN 不是。1978. -- 介绍eval
于 2012-05-15T12:23:02.007 回答