2015-06-22 2 views
0

Я просто пытаюсь понять, существует ли разница в том, как мы определяем структуру атрибутов в файлах атрибутов поваренной книги.Структура атрибутов шеф-повара

Ниже приведены два примера:

// style-A 
default['my_cookbook']['name'] = 'something' 
default['my_cookbook']['version'] = '0.1.0' 

// style-B 
node.default.my_cookbook = { 
    :name => 'something', 
    :version => '0.1.0' 
} 

Причина, я задаю этот вопрос есть, в предыдущих версиях повара я вроде помню стиль-A настоятельно рекомендуется, и все общественные поваренные следовать этому стилю. Я также вспоминаю некоторые проблемы со стилем-B, когда я пытался переопределить атрибуты из роли или среды, я бы придумал странное поведение, которое заменяет всю структуру хэша, если я попытаюсь переопределить один атрибут в нем.

Я не вижу эту ошибку сейчас, и я нахожусь в последней версии 11 шеф-повара, но просто задавался вопросом, не стоит ли мне об этом беспокоиться. Я стараюсь соответствовать всем моим кулинарным книгам с одним стилем, и мне нужен совет, как я его структурирую. Имеет ли значение в этот момент?

+0

Chef использует Mash, а не hash. Не уверен, что он автоматически конвертируется для вас или нет. Я бы предложил = Mash.new ({you hash}) лично. Но я не могу клясться в этом. –

+0

Он делает, основным недостатком между A и B был доступ к методу в переопределениях, который не был переопределен из-за метода, возвращающего значение и не устанавливающего его. 'default ['test'] = {: name => 'test1'}' является совершенным и работает. Просто оставайтесь на символьном или строковом атрибуте, чтобы избежать отказа метода при переопределении. – Tensibai

ответ

1

При использовании default['key']['subkey'] стиля, default является Mash и []= метод Mash преобразует Hash или массив хэшей к Mash.

Стиль node.default.property = присвоит Hash без вызова метода []=.

Mash наследует от Hash, предоставляя дополнительную функциональность, а также переопределяя значение по умолчанию инициализатора на {}, что делает любые неопределенные значения хешем, который затем преобразуется в пюре из-за поведения пюре.

 Смежные вопросы

  • Нет связанных вопросов^_^