OZ Язык программирования: логическая защита - PullRequest
0 голосов
/ 07 сентября 2011

В школе я изучаю предмет, который требует от нас использования интерфейса программирования Моцарта. Я не особо думаю об этом до сих пор. Но в любом случае, вот вопрос:

В OZ вам разрешено назначать переменную только один раз (она не может быть переназначена, но повторно объявлена ​​в текущей области, если я прав?). Я столкнулся с проблемой, когда я хочу использовать логическую охрану, но OZ не позволил мне. У меня есть ток:

declare
BrowserObject = {New Browser.'class' init}
BrowserSetup = false

proc {Browse Bs}
   if BrowserSetup == false then
      {BrowserObject option(representation strings:true)}
      {BrowserObject option(representation virtualStrings:true)}
      BrowserSetup = true
   end
   {BrowserObject browse(Bs)}
end

У кого-нибудь есть идеи, как это сделать? Спасибо за ваше время.

1 Ответ

1 голос
/ 07 сентября 2011

Есть много способов сделать это.

Самый простой - настроить объект браузера сразу после его создания.Нет необходимости в охране.

Если вы хотите использовать изменяемую переменную, посмотрите на ячейки.Например:

BrowserSetup = {NewCell false}
...
if @BrowserSetup == false ...
BrowserSetup := true

Однако это не является поточно-ориентированным, то есть проблемой, если вы используете процедуру Browse из нескольких потоков.Ленивая инициализация для BrowserObject, т.е. создайте и инициализируйте его только тогда, когда он используется в первый раз.Посмотрите документацию для «Value.byNeed», если хотите использовать это.

Я рекомендую дать языку шанс.Он сильно отличается от большинства языков, и вы, вероятно, никогда не будете использовать его «в реальном мире».Но есть чему поучиться, и все больше и больше концепций исследовательских языков находят свое отражение в основных языках.

...