0

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

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

4 回答 4

4

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

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

因此,变量可以是 aFixnum或 aNilClass但不能同时是两者。

在类实例方法的上下文中, 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>'
于 2014-08-06T20:50:08.753 回答
2

问问鲁比:

nil.is_a? Fixnum
# false
nil.is_a? Float
# false
于 2014-08-06T20:55:30.840 回答
0

不,Object 是 Fixnum 或 NilClass。self始终是当前类的类型。

于 2014-08-06T20:50:19.340 回答
0

没有。唯一self可能相等的方法nil是如果你在里面NilClass

class NilClass
  def self_is_nil?
    self == nil
  end
end

nil.self_is_nil? # => true
于 2014-08-06T20:54:59.983 回答