为什么 '0 是假的,而 'False 是真的?

Why is it that '0 is false, but 'False is true?

我在摆弄符号,惊讶地发现:

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

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

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

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

What is the best way to represent boolean values on Hy?

使用普通的旧 bool,如 Python。