Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Он определен у класса Object и не может быть переписан в дочерних классах.Это не так, любой метод может быть переопредлён. Это можно проверить:
class Foo
def equal?(other)
"fuu"
end
end
a = Foo.new
a.equal? "test" #=> "fuu"
<source>
Главное понимать к чему такое переопределение может привести.
Более того, вы можете переопределить метод equal? и у класса Object. Правда это поломает руби.
<source lang=ruby>class Object
def equal? other
"broken ruby"
end
end
1.equal? 1 #=> "broken ruby"
String === 'a'
Fixnum === 42
FalseClass === false
Array === [42]
Hash === {всё_такое: 42}
# это всё вернёт truecase a
when /foo/ then ...
when 'bar' then ...
when String then ...
when nil then ...
else ....
end
Numeric === 42
Integer === 42
Fixnum === 42
a = Object.new
a === a # true
a === Object.new # false
"foo" === "foo" # true
"foo".object_id == "foo".object_id # false
1 === 1.0 # true
1.class == 1.0.class # false
Fixnum === 1 # true
(1..10) === 5 # true
/o/ === 'foo' # true
Равенство в Ruby