在 ruby 中,您使用点来调用方法,或者换句话说,将方法发送到所处理的对象。
"100".to_i
我们正在向对象“100”发送消息 to_i
当我们这样做时:
puts "hello"
put 方法应用于哪个对象?
我是这样想的:
self.puts "hello"
self 是主要的,就像你现在所在的环境,例如 irb 控制台。
但它会引发错误。
Traceback (most recent call last):
2: from /Users/albert/.rbenv/versions/2.5.0/bin/irb:11:in `<main>'
1: from (irb):17
NoMethodError (private method `puts' called for main:Object)
为什么这是错误的? put 方法应用在哪里?
UPDATE:Ruby 2.7 允许使用 self 调用私有方法。此功能是在以下位置请求和讨论的:1 https://bugs.ruby-lang.org/issues/16123 and 2 https://bugs.ruby-lang.org/issues/11297.
puts https://ruby-doc.org/core-2.5.1/Kernel.html#method-i-puts是一个模块方法Kernel https://ruby-doc.org/core-2.5.1/Kernel.html. Kernel
包含在Object
所以几乎每个班级都可以使用它。puts "foo"
and Kernel.puts "foo"
是等价的。区别在于Kernel.puts
是明确的,而puts
可以调用本地定义的puts
method.
def puts(str)
p "my puts: #{str}"
end
puts "foo"; # "my puts: foo"
Kernel.puts "foo" # foo
在引擎盖下,Kernel.puts
calls $stdout.puts https://ruby-doc.org/core-2.5.1/doc/globals_rdoc.html. $stdout
是预定义的全局实例IO https://ruby-doc.org/core-2.5.1/IO.html.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)