在Ruby中,当我们命令ruby放置东西时,什么是“放置”?

时间:2016-04-22 17:37:26

标签: ruby irb

假设我们在交互式Ruby浏览器中运行:

>> sometext = "Hello, Cruel World!"
>> puts sometext
Hello, Cruel World!
=> nil
>>

推杆的目标是什么?我确信坐在那里看似“放”自己的裸体方法是“语法糖”,但我也打赌,对于执行这些操作的“对象”有一些明确的名称...像Ruby ::自我或自我::事或......是什么?

4 个答案:

答案 0 :(得分:4)

用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在下面的评论中所说,“内核是一个混合到Object的模块,它提供了一个名为puts的私有方法。在Ruby中,私有方法不能用显式接收器调用。所以当你问的时候关于什么对象正在进行推杆,当你调用puts时,它是范围内的当前对象(self)。“

答案 1 :(得分:3)

这是一个名为main的特殊对象,它是Object的一个实例,它继承了Kernel

答案 2 :(得分:1)

Puts在Ryby的内核中实现。更具体地说,它来自的IO类。您可以在文档中找到有关此内容的更多信息:http://ruby-doc.org/core-2.2.2/IO.html#method-i-puts

答案 3 :(得分:0)

由于某种原因,现在这个谈话刚出现在我的脑海中,确实有一个我能想到的问题的最佳答案。 Functional Java希望它能让它变得更加清晰。