1

你能告诉我以下语句的含义吗?

S:%B= %B="@1" S:%E= %E="@999"
4

3 回答 3

6

由于该行:

S:%B= %B="@1" S:%E= %E="@999"

实际上不是 MUMPS 代码,我同意其他回答者的观点,即在将代码粘贴到此论坛时可能存在问题。

您打算发布的最有可能的 MUMPS 代码是:

S:%B="" %B="@1" S:%E="" %E="@999"

有完整的解释,这是同一行上的两个 MUMPS 命令:

S:%B="" %B="@1" 
S:%E="" %E="@999"

并使用非简洁的 MUMPS,将是:

SET:%B="" %B="@1" 
SET:%E="" %E="@999"

或者用英语,这些命令检查一个变量,如果它没有一个对该程序有意义的值,则为该变量分配(SET)一个默认值。

对于名为 %B 的变量,当满足保护条件 (%B="") 时,会分配默认字符串值“@1”。同样,对于名为 %E 的变量,如果变量 %E 等于空字符串,则分配默认字符串值“@999”。

MUMPS 中的“@”字符用于将值后期绑定到变量(在语言中称为间接),但它后面必须跟一个变量名。诸如“1”或“999”之类的纯数值不是变量的名称,因此这些默认值不太可能间接引用另一个值。

于 2011-06-14T22:53:29.567 回答
4

假设集合解析为S:%B=""(在比较值时,DTM 和缓存默认情况下似乎不允许隐式 null;如果我错了,请有人评论),

set:%B="" %B="@1" set:%E="" %E="@999", 相当于

if %B="" set %B="@1"
if %E="" set %E="@999"

对于 %B 和 %E 变量中的每一个,如果它是一个空字符串,则分别分配文字字符串值“@1”和“@999”。在 SET、WRITE、DO 等命令之后的冒号 (:) 将其标记为以冒号后面紧跟的语句为条件。

至于语法,它只是程序员做的丑陋。

于 2011-06-13T15:20:59.210 回答
1

那就是所谓的条件SET。如果它们为空,则将 %B 或 %E 变量设置为相应的变量。

于 2011-03-21T09:17:10.360 回答