Разница между рутиной и голыми глобальными индикаторами - PullRequest
2 голосов
/ 13 октября 2010

Я работаю над MUMPS в моем недавнем проекте.У меня вопрос по голым показателям.Я запутался между процедурами и голыми глобальными ссылками.

Может кто-нибудь помочь мне понять разницу между процедурами и голыми индикаторами?Синтаксис для подпрограмм кажется очень похожим на синтаксис для обнаженных индикаторов.

1 Ответ

7 голосов
/ 13 октября 2010

Я не уверен, что полностью понимаю ваш вопрос, но я подозреваю, что вы имеете в виду тот факт, что как обычные, так и глобальные ссылки начинаются с каретки (^).

Подпрограммы используют каретку, чтобы различать подпрограмму и метку в текущей подпрограмме. Например:

D COMPUTATION         ; executes the COMPUTATION label in the current routine
D ^COMPUTATION        ; executes the COMPUTATION routine
D SUBCOMP^COMPUTATION ; executes the SUBCOMP label in the COMPUTATION routine.

Для переменных каретка указывает, что это глобальная переменная, а не локальная переменная. Это тот случай, когда вы используете «голые» ссылки или нет (именно здесь может потребоваться более четкое разъяснение вашего вопроса, поскольку, насколько я понимаю, ссылка «голая» не имеет значения). Разница, конечно, в том, что с голой ссылкой вы можете отбросить имя переменной и все, кроме последнего индекса глобальной переменной. Например:

S ^MYGLOB(1,1)="one"
S ^MYGLOB(1,2)="two"

эквивалентно

S ^MYGLOB(1,1)="one"
S ^(2)="two" ;naked, ewww

Все, что сказано, я бы настоятельно рекомендовал не использовать голые ссылки. Они предназначены для экономии времени при вводе кода из командной строки, но очень опасны в коде, который необходимо поддерживать. Например, если ссылка на ^ OTHERGLOB была вставлена ​​между двумя строками кода выше, ^ (2) теперь будет ссылаться на ^ OTHERGLOB (2), а не на ^ MYGLOB (1,2). Не говоря уже о том, что читать тяжело.

...