MF
声明:
MF MF(
Closure function,
classreturnType
)
描述:
一个标准的APP需要一些从GUI上获取输入值的逻辑,用他们计算出另外的数值传递给template文件或者显示在GUI上另外的窗体部件上。
这可以通过MF函数来实现(事实上MF并不是一个函数而是一个闭包,例如一个构造函数的函数)。这种特殊的类型需要与Groovy的闭包区分。
Parameter name | Parameter type | Description |
function | Closure | A Closure means some embedded code between braces |
returnType | class | This parameter determines the class type of the closure (e.g. "Boolean", "Integer", "String", "Float", "List", "Map") |
Execution context:
Instance constructor
例子:
在这个例子里我们的“DEMOAPP”有两个窗体元素:一个GLabel和一个GCheck。GLabel的可见属性可以被MF设置和更新。在这种情况下当我们按下check box label 变得不可见。
void DEMOAPP(DaveEnv daveEnv){
glabel_1.visible = MF(
{ // The code between ..
gcheck_1.value // .. braces is known ..
}, // .. as the "Closure"
Boolean // This is the "class" return type
)
}
MF 函数的执行方式:
在实际运行时DAVE™用一种特殊的方式来执行MF,与电子表格的执行方式相似。例如Microsoft Excel 文件。
我们把GUI中直接或间接变化的变量称为MVariables,就是MF中关联的变量。MVariables就像电子表中的单元格,他们可以包含常量或函数,常量就像一个没有输入值的函数。
定义:
Free MVariable: 包含常量的MVariable 或没有输入变量的MF函数
Non-free MVariable: 有输入值的 MF函数
MVariable 属性:
1. 如果你读取Non-freeMVariable你会得到函数值的更新。
2. 不可以更改"non-free"MVariable 的值或函数表达。
3. 如果你更改Free MVariable ,所有的于它相关的Non-free MVariable会由从属关系树向下递归直到所有受到影响的MVariables更新。
4. 不能做循环引用。
5. 所有APP GUI 变量是MVariables。
6. 如果更新变量相同MVariables将不会更新。
7. MVariables可以在APP 构建时设定,但在MF 函数中只可读,应为它会自动更新。
an example of MVariables dependency tree:
MVariables 类型:
每一个 GUI Widget 有多种变量属性,但在于GUI交互时只有MVariables 导出的属性可以被控制。
-
MInt
-
MFloat
-
MString
-
MBoolean
-
MList
-
MMap