【问题标题】:OZ Programming language: Boolean guardOZ 编程语言:布尔守卫
【发布时间】:2011-09-07 17:56:43
【问题描述】:

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

在 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

有没有人知道如何做到这一点?感谢您的宝贵时间。

【问题讨论】:

    标签: boolean procedural-programming guard oz


    【解决方案1】:

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

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

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

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

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

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

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

    【讨论】:

    • 感谢您提供非常快速且内容丰富的答案,我非常感谢。我一直坚持到本学期结束,所以我可能会在这段时间改变意见。顺便说一句,我得到了你的第一个建议。
    猜你喜欢
    • 2021-10-15
    • 2010-11-04
    • 2015-12-20
    • 2020-12-31
    • 1970-01-01
    • 2013-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多