У меня есть класс с конструктором, который принимает два параметра и устанавливает поля в эти значения. Я также хочу иметь возможность инициализировать объекты из этого класса, явно устанавливая поля внутри блока, передаваемого в конструктор.
Конструктор:
class Grammar
attr_reader :rules, :start, ...
def initialize(rules, start)
@rules = rules
@start = start
...
end
end
Параметры, передаваемые в конструктор, включают создание нескольких объектов, которые используются только в качестве промежуточных строительных блоков для параметров rules
и start
, и имеет смысл ограничить существование этих объектов блоком, передаваемым в конструктор. , В этом блоке я хотел бы сначала построить промежуточные объекты, а затем непосредственно установить поля нового объекта.
Я хочу иметь возможность создать экземпляр Grammar
примерно так:
grammar = Grammar.new { |g|
...
# build rules and start
...
g.start = start
g.rules = rules
}
Как мне изменить конструктор, чтобы разрешить оба метода инициализации?