代码之家  ›  专栏  ›  技术社区  ›  konung

将TrueClass/FalseClass的值输出为整数或字符串/

  •  6
  • konung  · 技术社区  · 16 年前

    我正在尝试找出是否有一种简单的方法来完成下面的任务,除了将I方法添加到TrueClass/FalseClass之外。

    这里有一个难题:

    或者我可以向True/False类中添加一个to\u I方法。但是我不确定我应该在rails应用程序中的什么地方定义它?就在这个模型里面还是别的什么地方?

    5 回复  |  直到 16 年前
        1
  •  5
  •   mipadi    16 年前

    您可以创建一个文件,例如 lib/boolean_ints.rb 还有猴子补丁 to_i 方法 TrueClass FalseClass 致\u i 方法,你可以把

    require 'boolean_ints'
    

        2
  •  5
  •   Joshua Pinter    10 年前

    扩展TrueClass和FalseClass humanize to_i .

    这在我的大多数项目中都会出现,所以我使用一个初始值设定项 (如果您使用的是Rails)

    config/initializers/true\u和\u false.rb

    class TrueClass
      def humanize
        'Yes'
      end
    
      def to_i
        1
      end
    end
    
    class FalseClass
      def humanize
        'No'
      end
    
      def to_i
        0
      end
    end
    

    然后进行渲染 true 两个都很容易 “机器消耗”

    > true.humanize     #=> Yes
    > true.to_i         #=> 1
    
    > false.humanize    #=> No
    > false.to_i        #=> 0
    
        3
  •  3
  •   Mark Rushakoff    16 年前

    你可以把它修补一下 TrueClass FalseClass 在您的应用程序中,靠近特定模型:任何 to_i 关于真与假很可能是一样的。

    irb(main):004:0> true.to_i
    NoMethodError: undefined method `to_i' for true:TrueClass
            from (irb):4
    irb(main):005:0> class TrueClass
    irb(main):006:1>  def to_i
    irb(main):007:2>   1
    irb(main):008:2>  end
    irb(main):009:1> end
    => nil
    irb(main):010:0>
    irb(main):011:0* true.to_i
    => 1
    

    irb(main):012:0> true ? 1 : 0
    => 1
    irb(main):013:0> false ? 1 : 0
    => 0
    

    当然,这也适用于非布尔变量:

    irb(main):019:0* 1234 ? 1 : 0
    => 1
    irb(main):020:0> nil ? 1 : 0
    => 0
    
        4
  •  2
  •   Matijs van Zuijlen    11 年前

    更新:此“解决方案”很危险,不应使用!

    您也可以尝试:

    value.object_id / 2
    

    为了避免重复10次,我还是建议创建一个方法:

    def boolean_to_i value
      value.object_id / 2
    end
    

    不过,真的不需要修补。

        5
  •  0
  •   Darth Egregious    10 年前

    5 - bool.to_s.length
    

    这将始终有效,因为 true.to_s "true" false.to_s "false" "true".length "false".length

    推荐文章