【发布时间】:2014-08-06 20:46:31
【问题描述】:
Fixnum/Float 可以为零吗?在这种情况下,self 甚至可以为零:
class Fixnum
def clamp(min, max)
if self == nil then nil end
...
end
end
【问题讨论】:
Fixnum/Float 可以为零吗?在这种情况下,self 甚至可以为零:
class Fixnum
def clamp(min, max)
if self == nil then nil end
...
end
end
【问题讨论】:
这是不可能的,因为nil有自己的类NilClass:
irb(main):001:0> nil.class
=> NilClass
irb(main):002:0> 456.class
=> Fixnum
所以变量可以是Fixnum 或NilClass,但不能同时是两者。
在类实例方法的上下文中,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>'
【讨论】:
问鲁比:
nil.is_a? Fixnum
# false
nil.is_a? Float
# false
【讨论】:
没有。 Object 是 Fixnum 或 NilClass 的一种。 self 始终是当前类的类型。
【讨论】:
不。 self 可能等于 nil 的唯一方法是,如果您在 NilClass 内部。
class NilClass
def self_is_nil?
self == nil
end
end
nil.self_is_nil? # => true
【讨论】: