在ruby类的本征类中设置实例默认值

时间:2014-02-24 07:28:47

标签: ruby metaprogramming instantiation eigenclass

这是我设法实现这一目标的一种方式。

class Test
 class << self
    attr_accessor :stuff

    def thing msg
      @stuff ||= ""
      @stuff += msg
    end
  end

  def initialize
    @stuff = self.class.stuff
    puts @stuff
  end
end

# Is there a better way of accomplishing this?
class AThing < Test
  thing "hello"
  thing "world"
end

AThing.new
# Prints "helloworld"

AThing中的界面是我想要的最终结果。我非常讨厌(我觉得必须有更好的方法)是@stuff = self.class.stuff。

有没有更好的方法来使用本征类为自身的所有实例设置默认数据集,同时保持“漂亮”的界面?

我想用这样的代码实现的是拥有一个类方法,比如说add_something可以为存储在类变量中的数组添加一些东西。

当实例化类时,它将在其'initialize方法中使用此数组来设置该实例的状态。

1 个答案:

答案 0 :(得分:1)

class Test
  @@stuff = ""

  class << self
    def thing msg
      @@stuff.concat(msg)
    end
  end

  def initialize
    puts @@stuff
  end
end

class AThing < Test
  thing "hello"
  thing "world"
end

AThing.new
# Prints "helloworld"