Может ли Fixnum/Float быть нулевым?
Может ли Fixnum/Float быть нулевым? В этом случае само собой может быть даже ноль:
class Fixnum
def clamp(min, max)
if self == nil then nil end
...
end
end
4 ответа
Решение
Это невозможно, потому что 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
Нет. Объект - это либо Fixnum, либо NilClass. self
всегда является типом текущего класса.
Нету. Единственный способ self
может равняться nil
если ты внутри NilClass
,
class NilClass
def self_is_nil?
self == nil
end
end
nil.self_is_nil? # => true