2

ruby 如何varz通过 using 调用方法varz[:foo]

class Component
  class << self
    def varz
      @varz ||= Hash.new
    end
  end
end

Component.varz[:foo] = 'bar'
puts Component.varz # {:foo=>"bar"}
4

2 回答 2

3

class << self 用于定义将在类上调用的类方法。

其中@varz 代表实例变量。你可能想知道,那为什么这个实例对象在类方法中呢?这是因为 class 本身是Class的实例。

还有一点需要注意,在 ruby​​ 方法中返回它的最后一条语句。因此,在您的情况下,Component.varz返回实例变量 @varz ,它是哈希类型。

Component.varz[:foo] = 'bar'

这会将键值对 foo 和 'bar' 添加到哈希中。

最后,

p Component.varz 

您正在打印由 varz 方法返回的值。

于 2012-12-13T10:14:56.353 回答
1

你剪错了。Component.varz是一个方法调用。对于它的结果(这是一个哈希),[:foo] =适用。[]and方法的[]=特殊之处在于您没有在接收者和方法之间放置句点。

于 2012-12-13T10:07:03.433 回答