布尔值,只能翻转为true

时间:2012-05-12 00:13:58

标签: data-structures types unique

是否有一个数据结构的名称(读取:boolean)只能从false移动到true,而不能返回false?想象一下像这样封装的东西:

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

出于好奇,是否有任何平台本机支持它?这似乎是某人之前必须遇到的事情......

3 个答案:

答案 0 :(得分:3)

您正在描述变量的时间属性;而不是像这样的数据结构。数据类型是一个简单的布尔值,但它的使用方式很有趣 - 作为一种'闩锁'及时。

布尔数据类型上的那种latch属性会使它成为 linearly typed boolean 的示例。线性类型和其他类型的uniqueness类型用于强制变量的时间属性 - 例如它们只能使用一次;或者不能分享。

它们对于在编译时强制执行某个操作(例如初始化)或具有不共享对象的编译时证明非常有用。因此,它们在系统编程中最为常见,其中低级属性的证明是纠正软件设计的关键。

答案 1 :(得分:0)

在Perl中你有Tie Variables,你可以建立你的标量值并使这种“类型”。但本地......也许在Smalltalk中可以构建类似这样的东西,或Prolog,但我不知道。

答案 2 :(得分: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编写。