【发布时间】:2020-03-04 11:07:10
【问题描述】:
我在玩符号,很惊讶地发现:
hy 0.18.0 using CPython(default) 3.7.3 on Linux
=> (bool '0)
False
=> (bool 'False)
True
=>
这是一个设计决定吗?在 Hy 上表示布尔值的最佳方式是什么?
【问题讨论】:
标签: hy
我在玩符号,很惊讶地发现:
hy 0.18.0 using CPython(default) 3.7.3 on Linux
=> (bool '0)
False
=> (bool 'False)
True
=>
这是一个设计决定吗?在 Hy 上表示布尔值的最佳方式是什么?
【问题讨论】:
标签: hy
'0 不是符号;它是一个HyInteger,它继承自int,在很多方面表现得像int。特别是它使用了int的__bool__方法。
'False 确实是一个符号 (HySymbol),但是对符号的大多数操作,包括 bool,都不要尝试评估符号。相反,他们将其视为字符串。至少目前,HySymbol 继承自 str。因此,任何非空符号上的bool 都会返回True。出于同样的原因,即使您将变量 x 和 y 设置为数字,(+ 'x 'y) 也会返回字符串 "xy"。如果您想布尔化由符号表示的变量的值,而不是符号本身,请说(bool (eval 'False))。 (令人困惑的是,Hy 有一个名为 eval 的核心函数,它与 Python 的 eval 不同。将来,您可能会称它为 hy.eval,而不是自动导入它。)
在 Hy 上表示布尔值的最佳方式是什么?
使用普通的旧 bool,就像在 Python 中一样。
【讨论】: