gets()如何成为String类的成员?

时间:2015-03-19 18:36:21

标签: ruby

我的理解是本身没有任何函数,但是所有东西都是一个方法,而且你没有明确命名的类的任何东西都是Kernel的方法。

我认为方法是对象,因为方法gets的方法chompmyStr = gets.chomp中的方法相同。 Ruby-doc.org告诉chompString方法。实际上,gets.class告诉getsString个对象。这里发生了什么? method如何成为String对象?从这种行为产生的机制,以及我在哪里可以了解更多信息?

2 个答案:

答案 0 :(得分:2)

实际上,gets是方法调用,返回值的类型为String。字符串有方法chomp,所以你可以很好地链接它们,如你所提到的那样:

myStr = gets.chomp

这就像:

myStr = gets().chomp()

<强>更新

如果要将方法作为对象获取,请尝试:

chomp = "Hello".method(:chomp)
=> #<Method: String#chomp>
chomp.call # this is how you can "call" the method

查看documentation了解更多信息!

希望有所帮助!

答案 1 :(得分:2)

您正在混淆方法调用的环境/ 接收器以及方法调用的返回值。一般来说,它们不一样。 gets主要在Kernel上定义,其返回值为String个实例。 chomp上定义了String,其返回值为String。在gets上定义的IO只是为了方便起见次要的。