代码之家  ›  专栏  ›  技术社区  ›  Andrew Grimm Alex Wayne

在ruby中,对于以问号结尾的方法名,truthiness是一种习惯用法吗?

  •  12
  • Andrew Grimm Alex Wayne  · 技术社区  · 15 年前

    带问号的方法返回一些真实的东西(例如,一个数字)来表示某些东西是真的,或者应该返回,这正常吗 true 自己被退回?

    例如,Ruby标准库或Rails中有没有使用truthiness的例子?

    背景: 有人写了 String#int? 方法 an answer to a separate question ,它返回一个整数来表示true,并且 nil 代表错误。另一个用户对没有返回布尔值感到惊讶。

    4 回复  |  直到 9 年前
        1
  •  6
  •   Marc-André Lafortune    15 年前

    它是 通常的 对于以结尾的方法 ? 要么返回 true false 但它不是系统的,没有核心方法可以假设。

    核心类中的一个例子是 Numeric#nonzero? 哪一个 从未 回报 真的

    42.nonzero? # => 42
    

    图书馆 Set add? delete? 我也是。我希望 Enumerable#one? 返回 nil 区分计数为零和大于1的情况。

    类似的例子是比较运算符( < , > ,…),通常只返回 真的 . 这里再次存在例外。 Module 的运算符将返回 当两个模块不相关时:

    Array > Enumerable  # => false
    Array > Fixnum      # => nil
    
        2
  •  8
  •   Jeremiah Peschka    15 年前

    添加a?对于Ruby中的方法名,习惯用法是方法将返回true或false。 Object#nil? 是一个很好的例子。事实上,Object有很多关于真实性检查的好例子。

        3
  •  2
  •   the Tin Man    15 年前

    你的问题有两个答案,都是有效的:

    严格地说,任何返回 false nil 值在执行条件测试时充当假布尔值,就像非nil或 true 价值是真的。所以,这个方法在大多数情况下都能正常工作,你想知道某个东西是不是整数。

    但在文体上以“?”结尾应该返回布尔值 真的 只有那些。

    所讨论的方法并不能很好地满足我们的期望,并且没有通过POLS(“最小意外原则”),因为您可以合理地期望返回一个布尔值,并得到一个整数或零。当代码因意外而失败时,这可能会导致不愉快的意外 或Fixnum值。

    所以,虽然这是一个有效的方法,但它不是 好的 方法,我会在代码评审中提到它。这导致了一个单独的讨论,像这样微妙的事情可以增强或损害代码维护,但这是一个完全不同的讨论。

        4
  •  2
  •   glenn mcdonald    15 年前

    我重命名了所讨论的方法以删除 ? ,这对正在回答的问题并不重要。扫描最终的核心功能?s,我唯一发现返回数据或为零的是 add? delete? 方法设置。

    推荐文章