如何在类中调用attr_accessor属性(但在任何方法之外)?

时间:2009-05-09 06:51:23

标签: ruby attributes

我正在为我的班级使用HTTParty,我想使用default_params方法。但是,我也希望能够在初始化实例化我的类时设置属性。

class MyClass
  include HTTParty

  attr_accessor :param1, :param2

  # This or @param1 doesn't work.
  default_params :param1 => self.param1, :param2 => self.param2

  def initialize(param1, param2)
    self.param1 = param1
    self.param2 = param2
  end
end

这样我可以做到

m = MyClass.new('hey', 'hello')

而不是

m = MyClass.new
m.param1 = 'hey'
m.param2 = 'hello'

但我想将这些属性与default_params一起使用。我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

Ruby在方法声明中有一个语法。

class MyClass
  attr_reader :param1, :param2
  def initialize(param1 = "default", param2 = 5) 
    @param1, @param2 = param1, param2
  end
end

MyClass.new.param2
# => 5

我从未使用过HTTParty,我不确定default_params方法的作用,所以我不知道这是否是您正在寻找的。

答案 1 :(得分:1)

从Github回购中查看this example file中的initialize方法。我之前没有使用过HTTParty,但这看起来就像你追求的那样。

此外,从您的示例中,您看起来正在混淆类方法和实例变量。