2012-05-12 54 views
1

是否有隻能從false移動到true而不能返回false的數據結構名稱(讀取:布爾值)?想象一下包裹的東西,像這樣:只能翻轉爲真的布爾值

private var _value = false 
def value = _value 
def turnOnValue() = value = true 

而且出於好奇,有沒有支持它本身的任何平臺?這似乎是某人之前必須遇到的東西...

回答

3

您正在描述變量的時態屬性;而不是像這樣的數據結構。數據類型是一個簡單的布爾值,但它是如何使用它是有趣的 - 作爲一種「閂鎖」的時間。

布爾數據類型的這種閂鎖屬性將使其成爲linearly typed boolean的示例。使用線性類型和其他種類的uniqueness類型來強制變量的時間屬性 - 例如,他們只能使用一次;或者不能共享。

它們對於在編譯時強制執行某個操作(例如初始化)或編譯時證明一個對象不被共享很有用。因此,它們在系統編程中最爲常見,其中低級特性的證明是正確軟件設計的關鍵。

+0

如果我正確閱讀wikipedia帖子,則只能讀取一次線性類型的布爾值 - 對於OP請求的內容似乎沒有用處。 –

+0

有許多不同的「線性」類型的系統和屬性 - 這是其中之一的一個例子。 –

0

在perl中你有Tie變量,你可以建立你的標量值,並使這種「類型」。但是本地......也許在Smalltalk中可以構建像這樣的東西,或者Prolog,但我不知道。

0

使自己的數據類型

public final class CustomBoolean { 
    private boolean value; 
    public void setValue(boolean value){ 
     // Bitwise OR 
     this.value |= value; 
    } 

    public boolean getValue(){ 
     return value; 
    } 
} 

例::

public static void main (String[] args) 
{ 
     CustomBoolean foo = new CustomBoolean(); 

     foo.setValue(false); 
     System.out.println(foo.getValue()); 

     foo.setValue(true); 
     System.out.println(foo.getValue()); 

     foo.setValue(false); 
     System.out.println(foo.getValue()); 
} 

輸出將是::

false 
true 
true 

這意味着你必須調用的getValue()在做任何明確的布爾操作之前 即

if(foo.getValue() && 1 == 1) 

該示例用Java編寫。

+0

我在找一個名字。 –

+0

@RichardPianka哦,好的。這就像......一個觸發器......沒有翻牌圈?我剛看到你的定義;然而,我更喜歡我的實現,因爲它允許將其設置爲像setValue(a && b)一樣,而不是如果(a && b)turnOnValue() – AlanFoster