0

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

在 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

有谁知道如何做到这一点?谢谢你的时间。

4

1 回答 1

1

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

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

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

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

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

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

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

于 2011-09-07T18:26:07.657 回答