Я пытаюсь добавить метод в модуль Kernel
, но вместо повторного открытия Kernel
и прямого определения метода экземпляра я пишу модуль и хочу Kernel
extend/include
, чтобы модуль.
module Talk
def hello
puts "hello there"
end
end
module Kernel
extend Talk
end
Когда я запускаю это в IRB:
$ hello
NameError: undefined local variable or method `hello' for main:Object
from (irb):12
from /Users/JackC/.rvm/rubies/ruby-1.9.2-p290/bin/irb:16:in `<main>
Если я проверил instance_methods
на Kernel
, я вижу, что #hello было добавлено в Kernel
, но не в main Object
.
Я также пробовал использовать include
, но то же самое происходит:
module Kernel
include Talk
end
Однако, если я определяю его напрямую:
module Kernel
def hello
puts "hello there"
end
end
Затем он включается в main Object
.
$ hello
hello there
=> nil
Включает модуль Talk
в Object
тоже:
class Object
include Talk
end
Возможно, я делаю это неправильно, или мне не хватает чего-то простого, но это поведение меня пугает.