2011-09-07 119 views
0

我在學校要求我們使用Mozart編程接口。到目前爲止,我並沒有真正考慮過這個問題。但無論如何,這裏是一個問題: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

有很多方法可以做到這一點。

最簡單的就是在創建瀏覽器對象後立即設置它。不需要警衛。

如果您想使用可變變量,請查看單元格。例如:

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

然而,這不是線程安全的,也就是說,它是一個問題,如果你從多個線程使用瀏覽程序。

最好的方法可能是使用BrowserObject的延遲初始化,即只有在第一次使用時纔會創建並初始化它。如果您想使用此功能,請查看「Value.byNeed」的文檔。

我建議給這個語言一個機會。它與大多數語言完全不同,您可能永遠不會在「現實世界」中使用它。但是還有很多東西需要學習,越來越多的研究語言的概念已經進入主流語言。

+0

感謝您提供非常快速和翔實的答案,我非常感謝。在這個學期結束之前,我一直和奧茲卡在一起,所以在這段時間我可能會改變看法。順便說一句,我着陸你的第一個建議。 – thomrand