点击或拖拽改变大小

Functions.MExec 方法

X#
评估宏编译的字符串。

命名空间:  XSharp.RT
程序集:  XSharp.RT (在 XSharp.RT.dll 中) 版本:2.22 GA
语法
[NeedsAccessToLocalsAttribute(TRUE)]
 FUNCTION MExec(
	oBlock AS Codeblock
) AS USUAL
查看代码

参数

oBlock
类型:Codeblock
宏编译的字符串。

返回值

类型:__Usual
编译表达式的值。
备注
MExec() 评估先前宏编译的表达式。 与其每次评估表达式时调用宏编译器,不如仅编译一次表达式,并在需要时执行已编译的结果,从而加快应用程序速度。
提示 提示:
在 Visual Objects 中,MCompile() 的返回值是一个包含 PCode 标记的特殊格式字符串。 我们在 X# 中改变了这一点,现在 MCompile() 的返回值是 _Codeblock 类型的代码块。
如果在 Visual Objects 中编译的字符串形式为 "{||.....}",那么你必须 调用 MExec() 将字符串转换为 _Codeblock 对象。要评估代码块,你 然后必须将 MExec() 的结果传递给 EVal() 函数。
如果在 Visual Objects 中编译的字符串不是 "{||.....}" 的形式, 就像本主题的示例中那样,那么对 MCompile() 的返回值调用 MExec() 会立即评估表达式并返回结果。
由于在 X# 中 MCompile() 的返回值是 _Codeblock 类型的代码块, 你也可以使用 Eval() 函数来评估代码块。
在 X# 中,对 MCompile() 返回的代码块调用 MExec() 将直接评估 代码块(当原始字符串不是代码块格式时)或者当原始字符串是代码块格式时 简单地返回相同的代码块。
示例
以下示例展示了 MCompile() 和 MExec() 的典型用法:
X#
 1LOCAL cComp AS CodeBlock        // 注意在 Visual Objects 中这必须是字符串类型
 2cComp := MCompile("2+3")
 3? MExec(cComp)                  // 5
 4nResult := MExec(cComp)         // 赋值
 5? MExec(cComp) = 5              // 比较
 6MEMVAR Two // 声明并初始化一个私有变量
 7Two := 2
 8cComp := MCompile("Two+3")      // 宏引用私有变量
 9? MExec(cComp)                  // 5
10// 以下仅在 X# 中有效,因为 cComp 的结果现在是一个 CodeBlock
11? Eval(cComp)
参见