Параметризовані класи - це мовна конструкція, яка допоможе вам краще структурувати код. Це запобігає надмірному використанню глобальних змінних (як у вашому прикладі).
Уявіть, що ви включили ще 20 класів в опис вашого вузла, і всім знадобиться встановлення певних змінних у глобальній області або області вузла. Також параметризовані класи дозволяють легко мати параметри за замовчуванням, тому ви можете використовувати значення за замовчуванням для $file_owner
того, щоб надавати одне і те ж значення (наприклад larry
) у кількох різних місцях.
Ваш приклад фрагмента (з двома додатковими вузлами) можна записати так:
node 'example.com' {
class { bar: }
}
node 'example.net' {
class { bar: owner = "harry" }
}
node 'example.net' {
class { bar: file_name = "barry.txt" }
}
class bar($owner = "larry", $file_name = "larry.txt") {
class { do_stuff: owner => $owner, file_name => $file_name }
}
class do_stuff($owner, $file_name) {
file { $file_name:
ensure => file,
owner => $owner,
}
}
При використанні глобальних змінних вам потрібно буде оголосити змінну, названу $owner
у кожному вузлі, і ви не зможете перезаписати $file_name
змінну / параметр на вузол. Замість цього вам потрібно буде оголосити інший bar
клас для кожного вузла.
Документ про еволюцію мови Лялечки та, звичайно, посібник з мов, дають кілька хороших прикладів використання параметризованих класів та обгрунтування цієї мовної конструкції:
$bar::file_name
та$::file_owner
отримати доступ до цих відповідних змінних. Однак при використанні параметризованих класів змінні, що передаються в клас через параметри, стають локально змінними.