Fixnum / Float可以为零吗?

时间:2014-08-06 20:46:31

标签: ruby null fixnum

Fixnum / Float可以为零吗?就像在这种情况下自己甚至可以是零一样:

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

4 个答案:

答案 0 :(得分:4)

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

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

因此,变量可以是FixnumNilClass,但不能同时为。{/ p>

在类实例方法的上下文中,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>'

答案 1 :(得分:2)

请问Ruby:

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

不。如果您在self内,则nil可能等于NilClass的唯一方式。

class NilClass
  def self_is_nil?
    self == nil
  end
end

nil.self_is_nil? # => true