【问题标题】:Can Fixnum/Float be nil?Fixnum/Float 可以为零吗?
【发布时间】:2014-08-06 20:46:31
【问题描述】:

Fixnum/Float 可以为零吗?在这种情况下,self 甚至可以为零:

class Fixnum
  def clamp(min, max)
    if self == nil then nil end
    ...
  end
end

【问题讨论】:

    标签: ruby null fixnum


    【解决方案1】:

    这是不可能的,因为nil有自己的类NilClass

    irb(main):001:0> nil.class
    => NilClass
    irb(main):002:0> 456.class
    => Fixnum
    

    所以变量可以是FixnumNilClass,但不能同时是两者。

    在类实例方法的上下文中,self 总是引用实例,它是类的类型。

    同样self不能更改:

    irb(main):006:0> class C
    irb(main):007:1>   def z
    irb(main):008:2>     self = nil
    irb(main):009:2>   end
    irb(main):014:1> end
    SyntaxError: (irb):8: Can't change the value of self
    self = nil
          ^
            from D:/dev/Ruby20/bin/irb:12:in `<main>'
    

    【讨论】:

      【解决方案2】:

      问鲁比:

      nil.is_a? Fixnum
      # false
      nil.is_a? Float
      # false
      

      【讨论】:

        【解决方案3】:

        没有。 Object 是 Fixnum 或 NilClass 的一种。 self 始终是当前类的类型。

        【讨论】:

          【解决方案4】:

          不。 self 可能等于 nil 的唯一方法是,如果您在 NilClass 内部。

          class NilClass
            def self_is_nil?
              self == nil
            end
          end
          
          nil.self_is_nil? # => true
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-09-23
            • 1970-01-01
            • 2023-03-27
            • 1970-01-01
            相关资源
            最近更新 更多