【问题标题】:Why is it that '0 is false, but 'False is true?为什么'0是假的,而'假是真的?
【发布时间】: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


    【解决方案1】:

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

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

    在 Hy 上表示布尔值的最佳方式是什么?

    使用普通的旧 bool,就像在 Python 中一样。

    【讨论】:

      猜你喜欢
      • 2018-07-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-09
      • 2019-01-30
      • 2017-02-20
      • 1970-01-01
      相关资源
      最近更新 更多