parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Можно, но не так. Точнее, очевидно, что вы используете не те инструменты или не используете нужные для вашей задачи.

andylars 29.07.2016 11:14 / 29.07.2016 11:23

Если у вас возникла задача - одинаковое значение по-умолчанию для множества (100) переменных, то это сильно похоже на то, что вам надо вооружиться структурой данных более высокого порядка (где есть всё необходимое), нежели использовать "батарею" плоских переменных.

Как уже сказали - хеш, пожалуй, лучший выбор.
Более того, он дает еще и удобство "именованных аргументов", для которых порядок следования не важен.

Пример:
@main[]

^mymethod[
   $.A[A1]
   $.D[D1]
]


@mymethod[_arg]
$param[                      ^rem{# default-ные значения  }
   $._default[DefCommon]     ^rem{# общий default для всех ключей }
   $.A[DefA]                 ^rem{# плюс частные default-ы для A и B }
   $.B[DefB]
]
^param.add[$_arg]            ^rem{# сложение default-ного хеша с входным }

VarA = $param.A
VarB = $param.B
VarC = $param.C

# а заданная $.D - не используется нашим методом, хотя и есть на входе
-------------------------------------------

Результат:

VarA = A1
VarB = DefB
VarC = DefCommon 
В том числе, есть и "резиновый" аргумент для неопределенного числа заданных входных переменных, который тоже возвращает хеш, который в свою очередь умеет _default-значение. Но будет уже привязка к порядку следования аргументов.

Пример:
@main[]

^mymethod[]
^mymethod[A]
^mymethod[A;B]
^mymethod[;B]


@mymethod[*vars]               ^rem{# починит уже кто-то подсветку кода? }
$vars[^hash::create[$vars]]    ^rem{# принудительное создание хеша, на случай пустого входного значения }
$vars._default[DefValue]  

$result[
Par1 = $vars.0             ^rem{# в случае отсутствия любой из них }
Par2 = $vars.1             ^rem{# вернет ValueDefault }
------------------
]



Результат:

Par1 = DefValue
Par2 = DefValue
-------------------

Par1 = A
Par2 = DefValue
-------------------

Par1 = A
Par2 = B
-------------------

Par1 = DefValue
Par2 = B
-------------------
Первый вариант намного сподручнее и удобнее.