Рубин: Есть ли драгоценный камень с методом attr_initialize?

Есть ли популярный рубиновый гем, который определяет метод класса 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

2 ответа

Решение

Наш attr_extras близок.

Он намеренно не обрабатывает аргументы по умолчанию, необязательные аргументы или нечто большее, чем присваивание - если вы хотите этого, вам, вероятно, следует просто определить обычный метод.

Тебе это не нужно. Просто напишите что-то вроде:

attr_accessor :attr1, :attr2, :attr3

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

Для меня это не выглядит слишком много кода.

Другие вопросы по тегам