在Ruby中,当我们命令ruby放东西时,"putting"是什么?
In Ruby, what is "putting" when we command ruby to puts something?
假设我们在交互式 Ruby 浏览器中并且 运行:
>> sometext = "Hello, Cruel World!"
>> puts sometext
Hello, Cruel World!
=> nil
>>
什么物体在推杆?我确信有一个裸方法坐在那里似乎 "puts" 本身就是 "syntactic sugar," 但我也敢打赌,执行这些操作的 "object" 有一些明确的名称......一些东西像 Ruby::Self 或 Self::Thing 或...它是什么?
Puts 在 Ruby 的内核中实现。更具体地说,它来自 IO class。您可以在文档中找到更多相关信息:http://ruby-doc.org/core-2.2.2/IO.html#method-i-puts
它是一个名为main
的特殊对象,它是Object
的一个实例,它继承了Kernel
。
在 irb 中说明:
2.3.0 :002 > Kernel.private_instance_methods.include?(:puts)
=> true
2.3.0 :003 > self
=> main
2.3.0 :004 > self.class
=> Object
2.3.0 :005 > self.class.ancestors
=> [Object, Kernel, BasicObject]
正如 Kenrick Chien 在下面的评论中所说,"Kernel is a module mixed in to Object, and it provides a private method called puts. In Ruby, private methods can not be called with an explicit receiver. So when you are asking about what object is doing the putting, it's the current object in scope (self) when you call puts."
假设我们在交互式 Ruby 浏览器中并且 运行:
>> sometext = "Hello, Cruel World!"
>> puts sometext
Hello, Cruel World!
=> nil
>>
什么物体在推杆?我确信有一个裸方法坐在那里似乎 "puts" 本身就是 "syntactic sugar," 但我也敢打赌,执行这些操作的 "object" 有一些明确的名称......一些东西像 Ruby::Self 或 Self::Thing 或...它是什么?
Puts 在 Ruby 的内核中实现。更具体地说,它来自 IO class。您可以在文档中找到更多相关信息:http://ruby-doc.org/core-2.2.2/IO.html#method-i-puts
它是一个名为main
的特殊对象,它是Object
的一个实例,它继承了Kernel
。
在 irb 中说明:
2.3.0 :002 > Kernel.private_instance_methods.include?(:puts)
=> true
2.3.0 :003 > self
=> main
2.3.0 :004 > self.class
=> Object
2.3.0 :005 > self.class.ancestors
=> [Object, Kernel, BasicObject]
正如 Kenrick Chien 在下面的评论中所说,"Kernel is a module mixed in to Object, and it provides a private method called puts. In Ruby, private methods can not be called with an explicit receiver. So when you are asking about what object is doing the putting, it's the current object in scope (self) when you call puts."