OZ编程语言:布尔警卫

时间:2011-09-07 17:56:44

标签: boolean procedural-programming guard oz

我正在学校学习,要求我们使用莫扎特编程接口。到目前为止,我并没有多想它。但无论如何,这是一个问题:

在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 个答案:

答案 0 :(得分:1)

有很多方法可以做到这一点。

最简单的方法是在创建浏览器对象后立即设置它。不需要看守。

如果要使用可变变量,请查看单元格。例如:

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

但是,这不是线程安全的,即如果您使用多个线程中的Browse过程则会出现问题。

最好的方法可能是对BrowserObject使用延迟初始化,即仅在第一次使用时创建并初始化它。如果你想使用它,请查看“Value.byNeed”的文档。

我建议给这个语言一个机会。它与大多数语言完全不同,你可能永远不会在“现实世界”中使用它。但是有很多东西需要学习,越来越多的研究语言概念进入主流语言。