在 ruby 的方法定义中使用 ```self.[]```
Use of ```self.[]``` in method definition in ruby
实际上,我在 NodeJS 方面经验丰富,但我对 Ruby 很陌生,我无法理解这段 ruby 代码是如何工作的,有人可以解释一下 self.call
方法和 self.[]
方法在此 Ruby 代码中执行 ?.
1. class Mine::Container
2.
3. def self.call
4. @containers || {}
5. end
6.
7. def self.[] namespace
8. @containers ||= Hash.new{|h, k| h[k] = new }
9. @containers[namespace]
10. end
11.end
self.call
、self.[]
方法究竟在做什么?。
如果我打电话给 Mine::Container.().
我会得到什么?
Mine::Container.()
是 Mine::Container.call
的快捷方式,这意味着它将调用 call
class 方法,如下所示:
def self.call
@containers || {}
end
而returns如果@containers
是@containers
的值,则设置,否则(如果@containers
不是nil
或false
) 返回空散列 ({}
).
此外,def self.[] namespace
定义了一个 class 方法,期望一个参数 namespace
可以这样调用:
Mine::Container[namespace]
实际上,我在 NodeJS 方面经验丰富,但我对 Ruby 很陌生,我无法理解这段 ruby 代码是如何工作的,有人可以解释一下 self.call
方法和 self.[]
方法在此 Ruby 代码中执行 ?.
1. class Mine::Container
2.
3. def self.call
4. @containers || {}
5. end
6.
7. def self.[] namespace
8. @containers ||= Hash.new{|h, k| h[k] = new }
9. @containers[namespace]
10. end
11.end
self.call
、self.[]
方法究竟在做什么?。
如果我打电话给 Mine::Container.().
我会得到什么?
Mine::Container.()
是 Mine::Container.call
的快捷方式,这意味着它将调用 call
class 方法,如下所示:
def self.call
@containers || {}
end
而returns如果@containers
是@containers
的值,则设置,否则(如果@containers
不是nil
或false
) 返回空散列 ({}
).
此外,def self.[] namespace
定义了一个 class 方法,期望一个参数 namespace
可以这样调用:
Mine::Container[namespace]