解决方法
看跌期权
method(:puts) #=> #<Method: Object(Kernel)#puts>
所以puts是一个在Kernel中定义的方法,可用于每个Object.
内核#放
puts "Hello world"
实际上是
self.puts( String.new("Hello world") )
自我是对象main
.
所以说“你好世界”是:
> Kernel#puts方法调用
>主要
>使用String对象作为参数.
笔记
请注意,如果您执行
self.puts( String.new("Hello world") )
你会收到一个错误:
private method `puts' called for main:Object (NoMethodError)
因为每个内核方法都可用于每个Object,但作为私有方法.你需要:
self.send(:puts,String.new("Hello world") )
测试
另一种检查方法是:
module Kernel def my_puts(*args) print "Calling Kernel#my_puts on #{self} with #{args}\n" print "Now delegating to Kernel#puts on #{self} with #{args} :\n" puts(*args) end end my_puts "Hello world"
它输出:
Calling Kernel#my_puts on main with ["Hello world"] Now delegating to Kernel#puts on main with ["Hello world"] : Hello world
看到?一切都是一个对象,即使它可能看起来不像.
2 3
同样的道理:2 3实际上是整数(2). (整数(3)).