【问题标题】:Implement truthiness in Ruby class在 Ruby 类中实现真实性
【发布时间】:2013-11-14 17:34:26
【问题描述】:

Ruby 类是否有可能实现一个真实性方法,或者除了 false 和 nil 之外的所有对象是否都被设计为自动为 true?

【问题讨论】:

    标签: ruby boolean


    【解决方案1】:

    第二个问题的答案是:是的,除了 falsenil 之外的所有内容在 Ruby 中都被认为是“真实的”。

    所以,例如

    a = 'foo' if 0
    # => "foo"
    a = 'foo' if []
    # => "foo"
    a = 'foo' if ''
    # => "foo"
    a = 'foo' if nil
    # => nil
    a = 'foo' if false
    # => nil
    

    【讨论】:

      【解决方案2】:

      至少在 1.9.3 中,您可以对! 进行一些控制:

      $ irb
      >> class C
      >>   def !
      >>     true
      >>   end
      >> end
      => nil
      >> c = C.new
      => #<C:0x7b5b9cd6>
      >> !c
      => true
      >> !!c
      => false
      >>
      

      【讨论】:

      • 你可以这样做,但这不是一个好主意。没有人愿意阅读这样的代码:puts 'eh?' if c &amp;&amp; !c
      • 我认为破解真实性根本不是一个好主意。我只是提供选择。
      【解决方案3】:

      除了 falsenil(包括 0,这有时会使来自其他语言的人感到困惑)之外的所有内容都是真实的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-06-20
        • 1970-01-01
        • 2014-12-07
        • 2010-10-05
        • 2012-08-26
        • 1970-01-01
        • 2016-03-11
        • 2010-11-08
        相关资源
        最近更新 更多