【发布时间】:2015-05-23 03:29:10
【问题描述】:
这个
.a {
@a: 1;
@b: 2;
@concat: @a;
@concat: ~"@{concat}@{b}";
margin: @concat;
}
给出一个错误。
语法错误:递归过多
但是,这个
.a {
@a: 1;
@b: 2;
@concat: e(`(function (a, b) {
var concat = "" + a;
concat += b;
return concat;
})(@{a}, @{b})`);
margin: @concat;
}
会起作用的。
有没有什么技巧可以仅用 LESS(不带 concat1、concat2 等变量)将字符串与自身连接起来?
请注意,上面的代码不是简化的主题,因为它将使用条件。代码必须生成
.optional-conditional-class1, .optional-conditional-class2, .optional-conditional-class3 {
....
}
以similar 循环方式。这就是为什么我想用类列表形成连接字符串。
【问题讨论】:
-
Less 是一种声明性语言,因此它的变量不能用于修改自身。你想解决什么任务(看起来像XY Problem)?
-
if (aCondition) { concat += a }; if (bCondition) { concat += b };这是简化的 js 伪代码。使用 LESS 可以轻松完成,除了......嗯,递归的事情。 -
当然,我更新了问题。希望它能解释一些东西。
-
对于您的编辑,请参阅例如stackoverflow.com/questions/25306437(不要错过我的 cmets)。简而言之:(目前)在 Less 中生成选择器列表的最佳方式是
extend功能,而不是一些基于字符串的操作。基于字符串的选择器生成仍然是可能的(实际上不需要自连接),但由于许多限制不推荐使用(仅仅是因为 Less 中的选择器不是字符串,因此基于字符串的选择器在许多情况下会中断)。 -
是的,我正在检查您的 less.curious 存储库,太好了,再次感谢您的提示。
标签: javascript css less