对红宝石的变量和方法感到困惑

时间:2012-12-13 10:03:06

标签: ruby

ruby​​如何使用varz调用varz[:foo]方法?

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

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

2 个答案:

答案 0 :(得分:3)

class&lt;&lt; self 用于定义将在类上调用的类方法。

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

还有一点要注意,在ruby方法中返回它的最后一个语句。所以在你的情况下 Component.varz 返回哈希类型的实例变量@varz。

Component.varz[:foo] = 'bar'

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

最后,

p Component.varz 

您正在打印由varz方法重新录制的值。

答案 1 :(得分:1)

你以错误的方式切割它。 Component.varz是方法调用。对于它的结果(这是一个哈希),[:foo] =适用。 [][]=方法的特殊之处在于您不会在接收方和方法之间放置句点。