+-

我在玩符号,很惊讶地看到:
hy 0.18.0 using CPython(default) 3.7.3 on Linux
=> (bool '0)
False
=> (bool 'False)
True
=>
这是设计决定吗?在Hy上表示布尔值的最佳方法是什么?
1
投票
投票
'0不是符号;它是一个HyInteger,它继承自int,在许多方面的行为都类似于int。特别是,它使用int的__bool__方法。
'False确实是一个符号(HySymbol),但是对符号的大多数操作,包括bool,都不要尝试评估该符号。相反,他们将其视为字符串。至少暂时来说,HySymbol继承自str。因此,任何非空符号上的bool都会返回True。出于同样的原因,即使将变量(+ 'x 'y)和"xy"设置为数字,x也会返回字符串y。如果要布尔化符号表示的变量的值,而不是符号本身,请说(bool (eval 'False))。 (令人困惑的是,Hy有一个名为eval的核心函数,与Python的eval不同。将来,您可能会期望将其称为hy.eval而不是自动导入。)
在Hy上表示布尔值的最佳方法是什么?
[使用普通的bool,如Python。