我想像这样添加
Kernel.rand
:
# I try something like
mod = Module.new do
def rand(*args)
p "do something"
super(*args)
end
end
Kernel.prepend(mod)
# And I expect this behaviour
Kernel.rand #> prints "do something" and returns random number
rand #> prints "do something" and returns random number
Object.new.send(:rand) #> prints "do something" and returns random number
不幸的是,上面的代码不能按我想要的方式工作。前置
Kernel.singleton_class
也不起作用
不需要使用
prepend
功能,欢迎任何有助于实现所需行为的建议
要获得您正在寻找的行为,您必须执行
rand
您创建的类的实例,您已在其中显式包含 Kernel
。
mod = Module.new do
def rand(*args)
p "do something"
super(*args)
end
end
Kernel.prepend(mod)
class C
include Kernel
def r
rand
end
end
c = C.new
#=> #<C:0x00007fd8544e5a28>
c.r
"do something"
0.24817907057954147