是否有只能从false移动到true而不能返回false的数据结构名称(读取:布尔值)?想象一下包裹的东西,像这样:只能翻转为真的布尔值
private var _value = false
def value = _value
def turnOnValue() = value = true
而且出于好奇,有没有支持它本身的任何平台?这似乎是某人之前必须遇到的东西...
是否有只能从false移动到true而不能返回false的数据结构名称(读取:布尔值)?想象一下包裹的东西,像这样:只能翻转为真的布尔值
private var _value = false
def value = _value
def turnOnValue() = value = true
而且出于好奇,有没有支持它本身的任何平台?这似乎是某人之前必须遇到的东西...
您正在描述变量的时态属性;而不是像这样的数据结构。数据类型是一个简单的布尔值,但它是如何使用它是有趣的 - 作为一种“闩锁”的时间。
布尔数据类型的这种闩锁属性将使其成为linearly typed boolean的示例。使用线性类型和其他种类的uniqueness类型来强制变量的时间属性 - 例如,他们只能使用一次;或者不能共享。
它们对于在编译时强制执行某个操作(例如初始化)或编译时证明一个对象不被共享很有用。因此,它们在系统编程中最为常见,其中低级特性的证明是正确软件设计的关键。
在perl中你有Tie变量,你可以建立你的标量值,并使这种“类型”。但是本地......也许在Smalltalk中可以构建像这样的东西,或者Prolog,但我不知道。
使自己的数据类型
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编写。
我在找一个名字。 –
@RichardPianka哦,好的。这就像......一个触发器......没有翻牌圈?我刚看到你的定义;然而,我更喜欢我的实现,因为它允许将其设置为像setValue(a && b)一样,而不是如果(a && b)turnOnValue() – AlanFoster
如果我正确阅读wikipedia帖子,则只能读取一次线性类型的布尔值 - 对于OP请求的内容似乎没有用处。 –
有许多不同的“线性”类型的系统和属性 - 这是其中之一的一个例子。 –