点击或拖拽改变大小

Functions.MCompile 方法 (String)

X#
宏编译字符串。

命名空间:  XSharp.RT
程序集:  XSharp.RT (在 XSharp.RT.dll 中) 版本:2.22 GA
语法
 FUNCTION MCompile(
	cString AS STRING
) AS _Codeblock
查看代码

参数

cString
类型:String
要编译的字符串。

返回值

类型:_Codeblock
以宏编译形式的字符串。
备注
MCompile() 允许您使用宏编译器编译字符串并存储编译结果以供后续执行。您可以通过仅编译一次表达式并按需执行编译形式来加速应用程序,而不是每次评估表达式时调用宏编译器。
提示 提示:
在 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() allows you to use the macro compiler to compile a string and store the compiled results for later execution. Instead of invoking the macro compiler each time an expression is evaluated, you could speed up your application by compiling an expression only once and executing the compiled form as often as desired.
示例
以下示例展示了 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)
参见