【发布时间】:2013-11-01 09:54:56
【问题描述】:
如何在 Delphi 中最好地实现 three valued logic?
我在想
type
TExtBoolean = (ebTrue, ebFalse, ebUnknown);
与
function ExtOr(A: TExtBoolean; B: TExtBoolean): TExtBoolean;
begin
if (A = ebTrue) or (B = ebTrue) then
Result := ebTrue
else if (A = ebFalse) and (B = ebFalse) then
Result := ebFalse
else
Result := ebUnknown;
end;
等等。
但这似乎不是很优雅。有没有更好的方法?
编辑:优雅是指易于使用。实现越优雅越好。 CPU 效率对我来说并不重要。
【问题讨论】:
-
我认为使用枚举没有任何问题。而且很容易扩展。 (不完全是 3 个有价值的逻辑)我首先工作的性别是:“男性,女性”然后变成:“男性,女性,未知”,然后变成:“男性,女性,未知,不适用。”
-
@PieterB ...但是这两个答案允许更优雅的用法。而且我认为它比男性/女性更“通用”。
-
非常感谢您的两个答案,我不知道 D2006 中提供了运算符重载(但它是:)。这两个答案似乎都提供了我正在寻找的优雅解决方案(+1)。我会稍微修改一下,然后再决定最终接受哪一个。
-
我会将 Unknown 放在 True/False 之前 - 如果您忘记设置值的结果,它将始终默认为枚举的第一个值。不利的一面是序数值会偏离布尔枚举
-
@MattAllwood 值类型在为局部变量或返回值时不会默认初始化
标签: delphi logic delphi-2006