你能告诉我以下语句的含义吗?
S:%B= %B="@1" S:%E= %E="@999"
由于该行:
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”之类的纯数值不是变量的名称,因此这些默认值不太可能间接引用另一个值。
假设集合解析为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 等命令之后的冒号 (:) 将其标记为以冒号后面紧跟的语句为条件。
至于语法,它只是程序员做的丑陋。
那就是所谓的条件SET
。如果它们为空,则将 %B 或 %E 变量设置为相应的变量。