主要观点:
- Ruby 中无真正的顶级/全局方法,无显式接收者的方法是当前对象的方法,顶级定义的方法成为每个对象的实例方法,顶级引入的模块也被引入到
Object
。 puts
等看似“顶级”的方法实际是Kernel
模块的私有方法,包含在每个对象中,在顶级作用域中self
是main
对象,它是Object
的实例,包含Kernel
模块的方法。- 自定义的顶级方法也成为
Object
类的私有实例方法,在每个对象中可用,但过多的顶级随机方法可能导致调试问题。 - 顶级作用域的行为类似任何方法体,可模拟
main
方法及其定义行为,但常量在main
作用域中的处理方式略有不同。
关键信息:
Kernel
模块本意是存储“全局”方法,但实际上很多公共方法也在其中,一些公共方法“意外”回到Kernel
。- 在 Ruby 中,
puts
等方法的调用与其他语言不同,在对象内部调用puts
时是对象自己的puts
方法。 - 记住顶级作用域特殊,一切都进入
Object
类的启发式方法,但要注意常量的特殊处理。
重要细节:
- 在 Ruby 中,私有方法对定义类的子类可用,
protected
方法对当前对象和同一类的其他对象可用。 - 不同语言对“全局”方法的处理方式不同,Ruby 有其独特之处。
- 可通过
method(:puts)
等方式查看方法的所有者和接收者等信息。 - 顶级作用域的行为类似嵌套方法定义,可模拟
main
方法,但常量处理有差异。
总结:Ruby 中方法的定义和调用有其独特规则,理解这些规则有助于进行元编程和调试大型代码库,同时要注意保持顶级作用域的整洁,避免引入过多随机方法。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。