2

我在玩符号,很惊讶地看到:

hy 0.18.0 using CPython(default) 3.7.3 on Linux
=> (bool '0)
False
=> (bool 'False)
True
=> 

这是一个设计决定吗?在 Hy 上表示布尔值的最佳方式是什么?

4

1 回答 1

2

'0不是符号;它是 a HyInteger,它继承自a 并在许多方面int表现得像 a 。int特别是,它使用int'__bool__方法。

'False确实是一个符号 ( HySymbol),但对符号的大多数操作,包括bool,都不会尝试评估该符号。相反,他们将其视为字符串。至少目前,HySymbol继承自str. 因此,bool在任何非空符号上返回True。出于同样的原因,即使您已将变量和设置为数字,也会(+ 'x 'y)返回字符串。如果您想布尔化由符号表示的变量的值,而不是符号本身,例如. (令人困惑的是,Hy 有一个名为与 Python 不同的核心函数。将来,您可能会期望调用它而不是自动导入它。)"xy"xy(bool (eval 'False))evalevalhy.eval

在 Hy 上表示布尔值的最佳方式是什么?

用一个普通的 old bool,就像在 Python 中一样。

于 2020-03-04T12:29:14.557 回答