Я начал использовать пространства имен в Less CSS и столкнулся с нерегулярностью, которая кажется ошибкой, а не дизайном.
#responsive {
.spacing {
.margin(@property; @side) {
// This WON'T work when called externally.
.margin(@property; @side; @side; @side; @side);
}
.margin(@property; @vertical; @horizontal) {
// This WILL work when called externally.
#responsive.spacing.margin(@property; @vertical; @horizontal; @vertical; @horizontal);
}
.margin(@property; @top; @right; @bottom; @left) {
// This is the function that eventually gets called
}
}
}
В этом примере показана перегруженная функция с 3 разными сигнатурами.Он вызывается следующим образом:
#responsive.spacing.margin(padding, 1);
При ссылке на верхнюю перегрузку, которая затем вызывает основную функцию, я получаю ошибку компиляции.
.margin cannot be referenced...
Это можно исправить, применив полностьюnamespace name как во втором варианте.
Хотя это обходной путь, кажется, что он противостоит тому, что такое пространство имен, в конце концов .margin
просто вызывает другую версию .margin
внутри того же пространства имен, #responsive.spacing
.