1

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

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

出于好奇,是否有任何平台原生支持它?这似乎是某人以前遇到过的事情......

4

3 回答 3

3

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

boolean 数据类型的这种闩锁属性将使其成为线性类型 boolean的示例。线性类型和其他类型的唯一性类型用于强制变量的时间属性——例如,它们只能使用一次;或无法共享。

它们对于在编译时强制执行已发生的操作(例如初始化)或在编译时证明对象未被共享很有用。因此,它们在系统编程中最常见,其中低级属性的证明是正确软件设计的关键。

于 2012-05-12T00:19:16.617 回答
0

在 perl 中,你有 Tie 变量,你可以建立你的标量值并制作这种“类型”。但在本机......也许在 Smalltalk 中可以构建类似这样的东西,或者 Prolog,但我不知道。

于 2012-05-12T00:18:39.750 回答
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 编写的。

于 2012-05-12T00:30:52.507 回答