【发布时间】:2017-09-07 11:21:02
【问题描述】:
我正在阅读 Dave Copeland 撰写的关于 Service Objects 的博客文章,并看到以下内容:
Ruby 中的类是全局符号,这意味着类方法是全局符号。编码为全局变量是我们不再使用 PHP 的原因。
我想进一步理解这个陈述,并有一些问题。
- 类方法和实例方法在符号上下文中有何不同?
例如,采取以下 irb 会话:
irb(main):001:0> Symbol.all_symbols.grep /Foo/
=> []
irb(main):002:0> Symbol.all_symbols.grep /some.*method/
=> []
irb(main):003:0> class Foo
irb(main):004:1> def some_instance_method; end
irb(main):005:1> def self.some_class_method; end
irb(main):006:1> end
=> :some_class_method
irb(main):007:0> Symbol.all_symbols.grep /Foo/
=> [:Foo]
irb(main):008:0> Symbol.all_symbols.grep /some.*method/
=> [:some_instance_method, :some_class_method]
-
#some_instance_method和::some_class_method在符号上下文中有何不同? - 当我检查
Symbol.all_symbols时我在做什么与查看“全局符号”是一样的吗? -
为什么会同时显示
#some_instance_method和::some_class_method?在阅读了上面的引用后,我预计008的结果是:irb(main):008:0> Symbol.all_symbols.grep /some.*method/ => [:some_instance_method]
【问题讨论】:
标签: ruby class oop global symbols