1:
В общем, когда вам нужно сгенерировать разные вещи для разного количества переданных аргументов, вам вообще не нужно использовать значения аргументов по умолчанию, например:
.margin(@top, @bottom, @right, @left) {
/* right and left are passed */
}
.margin(@top, @bottom) {
/* right and left are not passed */
}
.margin() {
/* no arguments passed */
}
// etc.
Обратите внимание, что каждый из этих миксинов может повторно использовать другие, например, .margin(@top, @bottom)
может сделать что-то особенное для «без правого и левого регистра», а затем вызвать .margin(@top, @bottom, 0, 0)
для выполнения основной работы.
2:
Но если по какой-то причине вам все еще нужны эти значения по умолчанию, вы можете использовать какое-то специальное значение по умолчанию, которое не может быть допустимым полем, например. что-то вроде этого:
.margin(@top: undefined, @bottom: undefined, @right: undefined, @left: undefined) {
.test-args();
.test-args() when (@right = undefined) {
/* right is not passed */
}
.test-args() when (@left = undefined) {
/* left is not passed */
}
.test-args()
when not(@right = undefined)
and not(@left = undefined) {
/* right and left are passed */
}
// etc.
}
3:
И третий вариант — использовать вариативные аргументы и проверять их количество, но я думаю, что этот вариант самый подробный и глупый:
.margin(@args...) {
.eval-args(length(@args)); // requires LESS 1.5.+
.eval-args(@nargs) {
// default values:
@top: not passed;
@bottom: not passed;
@right: not passed;
@left: not passed;
}
.eval-args(@nargs) when (@nargs > 0) {
@top: extract(@args, 1);
}
.eval-args(@nargs) when (@nargs > 1) {
@bottom: extract(@args, 2);
}
.eval-args(@nargs) when (@nargs > 2) {
@right: extract(@args, 3);
}
.eval-args(@nargs) when (@nargs > 3) {
@left: extract(@args, 4);
}
args: @top, @bottom, @right, @left;
}
Хотя, вероятно, в некоторых особых случаях использования у него могут быть свои плюсы.
person
seven-phases-max
schedule
27.11.2013