为什么 '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"
即使您已将变量 x
和 y
设置为数字。如果你想布尔化由符号表示的变量的值,而不是符号本身,比如 (bool (eval 'False))
。 (令人困惑的是,Hy 有一个名为 eval
的核心函数,它与 Python 的 eval
不同。将来,您可能会称它为 hy.eval
而不是它被自动导入。)
What is the best way to represent boolean values on Hy?
使用普通的旧 bool
,如 Python。
我在摆弄符号,惊讶地发现:
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"
即使您已将变量 x
和 y
设置为数字。如果你想布尔化由符号表示的变量的值,而不是符号本身,比如 (bool (eval 'False))
。 (令人困惑的是,Hy 有一个名为 eval
的核心函数,它与 Python 的 eval
不同。将来,您可能会称它为 hy.eval
而不是它被自动导入。)
What is the best way to represent boolean values on Hy?
使用普通的旧 bool
,如 Python。