Это работает, как ожидалось:рубин 2.2+, используя kind_of (класс) внутри модуля, простирающейся базового класса Hash не работает
h = { a: "alpha" }
h.kind_of?(Hash) # => true
Однако, когда я пытаюсь расширить базовый класс Ruby, с модулем, он не работает:
module CoreExtensions
module Hash
module Keys
def my_custom_method
self.each do |k, v|
self.kind_of?(Hash) # => false
end
end
end
end
end
Hash.include CoreExtensions::Hash::Keys
h = { a: "alpha" }
h.my_custom_method
Обратите внимание, что это надуманный пример кода, который демонстрирует мою проблему.
Есть ли что-то другое в использовании object.kind_of?(Class)
внутри модуля? Мое предположение заключается в том, что использование self
ссылается на модуль как-то, а не на фактический класс Hash
, но self.class # => Hash
, поэтому он «сбивает», как класс Hash.
Ha! Это мелочи, которые тебя достали ... Я знаком с ::, но даже не думал об этом здесь. Очень признателен. –