1

可能重复:
在 Objective-C 2.0 中是否有类似 Matlab 的 eval 语句的东西?

Objective-C 中是否有 eval 函数(如 lisp、javascript、python、ruby ......)?

我所说的 eval 是一个函数,它可以将任意 Objective-C 代码(可能具有类定义、副作用、自省等)作为字符串(不是块或 NSInvocation 或 IMP 或类似的东西),并评估每个表达式,尊重当前运行时环境状态、副作用、类定义等。

如果没有,是否可以在现有运行时的范围内实现?

4

3 回答 3

4

无论是语言还是 Apple 的框架都没有直接支持这样的事情。然而, LLVM的目标之一是成为一个可嵌入的编译器套件。我很确定它可以在内存中生成可执行代码。困难的部分是为该代码提供对调用代码的预先存在环境的访问权限。例如,编译引用局部变量或类似内容的代码。

(请注意,iOS App Store 禁止使用这种方法,但它可能在 Mac OS X 上可行。)

于 2012-04-14T23:12:29.270 回答
1

绝对不。Objective-C 是一种完全编译的语言。只有解释型语言才能做这种事情。

于 2012-04-14T23:03:37.257 回答
0

不,代码评估是动态语言的功能。尽管 Objective-C 具有动态特性,甚至 Cocoa 运行时,但它仍然被认为是一种静态语言(通常)。

于 2012-04-14T23:04:50.850 回答