1

是否有一些流行的 ruby​​ gem 定义了 attr_initialize 类方法,其行为如下:

attr_initialize :attr1, :@attr2, [:@attr3, 1] do |arg4|
  post_initialization(arg4)
end

将评估为等同于:

attr_accessor :attr1

def initialize(attr1, attr2, attr3 = 1, arg4 = nil)
  @attr1 = attr1
  @attr2 = attr2
  @attr3 = attr3
  post_initialization(arg4)
end
4

2 回答 2

2

我们的attr_extras很接近。

它故意不处理默认参数、可选参数或多于赋值的参数——如果你想要这样,你可能应该只定义一个常规方法。

于 2012-10-18T19:22:50.707 回答
1

你不需要那个。只需编写如下内容:

attr_accessor :attr1, :attr2, :attr3

def initialize(*attrs)
  @attr1, @attr2, @attr3 = attrs
  post_initialization attrs.last
end

对我来说,它看起来不像太多的代码。

于 2011-03-08T03:08:45.237 回答