Атрибут Moose ArrayRef возвращен как массив

На Вашем первом проекте TDD существует две больших потери, время и персональная свобода

, Вы теряете время потому что:

  • Создание всестороннего, пересмотренного, удобного в сопровождении комплекта модульных тестов и приемочных испытаний добавляет главное время к первому повторению проекта. Это может быть временем, сэкономленным в конечном счете, но одинаково может быть время, что Вы не должны экономить.
  • необходимо выбрать и стать опытными в базовом наборе инструментов. Инструмент поблочного тестирования должен быть добавлен некоторой платформой насмешки и обеими потребностями стать частью Вашей автоматизированной системы сборки. Вы также хотите выбрать и генерировать соответствующие метрики.

Вы теряете персональную свободу потому что:

  • TDD является очень дисциплинированным способом записать код, который имеет тенденцию тереть сырые данные о тех вверху и внизу масштаба навыков. Всегда запись производственного кода определенным способом и подчинение Вашей работы к непрерывной экспертной оценке могут волновать Ваших худших и лучших разработчиков и даже привести к потере количества головок.
  • Самые Гибкие методы, которые встраивают TDD, требуют, чтобы Вы говорили с клиентом постоянно о том, что Вы предлагаете выполнить (в этом story/day/whatever) и каковы торговля offs. Еще раз это не общая чашка чая, и на стороне разработчиков забора и на клиентах.

Hope это помогает

8
задан mpeters 7 December 2009 в 18:04
поделиться

3 ответа

Используйте Moose :: Meta :: Attribute :: Native :: Trait :: Array и делегирование, например

handles => { my_array => 'elements' }

(через doy на #moose)

auto_deref имеет нежелательное поведение - по-прежнему возвращает ссылку, если вы вызываете метод доступа в скалярном контексте.

17
ответ дан 5 December 2019 в 06:23
поделиться

Хотя вы можете использовать auto-deref , Moose :: Manual :: BestPractices говорит, что это не лучший способ сделать это, и что вместо этого вам следует рассмотреть возможность использования Moose :: Meta :: Attribute ::

6
ответ дан 5 December 2019 в 06:23
поделиться

Используйте параметр auto_deref :

has my_field => (
    is => 'ro', isa => 'ArrayRef[Str]',
    auto_deref => 1,
    # rest of options...
);

Обратите внимание, что иногда вы не получите обратно массив при использовании метода чтения, в зависимости от скалярного контекста или контекста списка выражение. Некоторое время назад я столкнулся с ситуацией, когда мне пришлось явно передать контекст массива в выражение, чтобы разыменование работало ... Я добавлю пример, если смогу его найти.

3
ответ дан 5 December 2019 в 06:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: