我的理解是本身没有任何函数,但是所有东西都是一个方法,而且你没有明确命名的类的任何东西都是Kernel
的方法。
我认为方法是对象,因为方法gets
的方法chomp
与myStr = gets.chomp
中的方法相同。 Ruby-doc.org告诉chomp
是String
方法。实际上,gets.class
告诉gets
是String
个对象。这里发生了什么? method
如何成为String
对象?从这种行为产生的机制,以及我在哪里可以了解更多信息?
答案 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
只是为了方便起见次要的。