Moose::Manual::Attributes состояние:Почему построитель Moose берет строковое значение?
В качестве альтернативы использования ссылки на подпрограмму [по умолчанию], вы можете вместо этого поставить метод строителя для атрибута: ... Это имеет несколько преимуществ. Во-первых, он перемещает кусок кода в свой собственный именованный метод, что улучшает читаемость и организацию кода.
Таким образом, ваш атрибут может определить значение по умолчанию таким образом:
has attr => (
is => 'ro',
builder => 'subroutine'
);
sub subroutine {
# figure out and return default value
}
Я не понимаю, почему это должно быть отделено от дефолта. Не могли бы вы просто передать ссылку на именованную подпрограмму?
has attr => (
is => 'ro',
default => \&subroutine
);
И хотел бы, чтобы не быть лучше практикой программирования, поскольку вы гарантированно не случайно относятся к подпрограмме, которая не существует? Вы ссылаетесь на метод с логической ссылкой вместо символической ссылки.
Ну, я знаю, что это не ссылка в смысле Perl; Я просто подумал, что лучше программировать - это передать реальную ссылку на именованную подпрограмму по причинам, о которых я упоминал. Однако вы правы; остальная часть руководства действительно показывает, почему так, как это желательно ... – skiphoppy
Обратите внимание на абзац, который начинается «Это имеет несколько преимуществ. Первое ...»; возможно, это помогло бы переместить часть следующего раздела там, чтобы следить за тем, чтобы пункт дал больше, чем просто одно преимущество, немного раньше для тех, кто интересуется. – skiphoppy