Hy 为什么';0为false,但';假是真?
我在玩符号,惊讶地发现:Hy 为什么';0为false,但';假是真?,hy,Hy,我在玩符号,惊讶地发现: hy 0.18.0 using CPython(default) 3.7.3 on Linux => (bool '0) False => (bool 'False) True => 这是一个设计决定吗?在Hy上表示布尔值的最佳方式是什么?'0不是符号;它是一个HyInteger,继承自int,在许多方面表现得像int。特别是,它使用了int的\uuu bool\uu方法 'False确实是一个符号(HySymbol),但对符号的大多数操作,包括b
hy 0.18.0 using CPython(default) 3.7.3 on Linux
=> (bool '0)
False
=> (bool 'False)
True
=>
这是一个设计决定吗?在Hy上表示布尔值的最佳方式是什么?
'0
不是符号;它是一个HyInteger
,继承自int
,在许多方面表现得像int
。特别是,它使用了int
的\uuu bool\uu
方法
'False
确实是一个符号(HySymbol
),但对符号的大多数操作,包括bool
,都不会尝试对符号求值。相反,他们把它当作一根绳子。至少目前,HySymbol
继承自str
。因此,任何非空符号上的bool
返回True
。出于同样的原因,(+'x'y)
返回字符串“xy”
,即使您已将变量x
和y
设置为数字。如果要布尔化由符号表示的变量的值,而不是符号本身,请说(bool(eval'False))
。(令人困惑的是,Hy有一个名为eval
的核心函数,它不同于Python的eval
。将来,您可能会将其称为Hy.eval
,而不是自动导入。)
在Hy上表示布尔值的最佳方式是什么
使用普通的旧bool
,如在Python中