Вы просто создали новый класс под названием Hash
, вложенный внутри C1
.
Вы не добавили метод в класс Ruby's Hash
, как вы ожидали. Если вы этого хотите, переместите class Hash
за пределы C1
и запустите: код будет работать как ожидалось.
Как ваш текущий код, предположим, что вы назвали вложенный класс как MyThing
. Теперь, вы бы не работали {}.ok?
, чтобы работать, не так ли?
Подведем итоги:
Это будет работать:
class Hash
def ok?
return 'non-nested hash ok'
end
end
class C1
def m1
return Hash.new.ok? #WORKS
end
def m2
return {}.ok? #WORKS
end
end
Это провал:
class C1
class MyThing
def ok?
return 'nested hash ok'
end
end
def m1
return MyThing.new.ok? #WORKS
end
def m2
return {}.ok? #FAILS
end
end
Если я хочу добавить метод «хорошо?» в хэш, но применимы только к классу C1 и его подклассу. Как это сделать? – Yehudi