2012-05-12 56 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