Javascript 少变量自级联

Javascript 少变量自级联,javascript,css,less,Javascript,Css,Less,这个 给出了一个错误 语法错误:递归太多 但是, .a { @a: 1; @b: 2; @concat: @a; @concat: ~"@{concat}@{b}"; margin: @concat; } 会有用的 是否有一种技巧可以将字符串与其自身连接起来,只使用较少的变量(不使用concat1,concat2等变量) 请注意,上面的代码不是简化的主题,因为它将使用条件。代码必须生成 .a { @a: 1; @b: 2; @concat: e(`(functi

这个

给出了一个错误

语法错误:递归太多

但是,

.a {
  @a: 1;
  @b: 2;
  @concat: @a;
  @concat: ~"@{concat}@{b}";
  margin: @concat;
}
会有用的

是否有一种技巧可以将字符串与其自身连接起来,只使用较少的变量(不使用
concat1
concat2
等变量)

请注意,上面的代码不是简化的主题,因为它将使用条件。代码必须生成

.a {
  @a: 1;
  @b: 2;
  @concat: e(`(function (a, b) {
    var concat = "" + a;
    concat += b;
    return concat;
  })(@{a}, @{b})`);
  margin: @concat;
}

以循环的方式。这就是为什么我想用类列表形成连接字符串。

是的,基本上是可能的,尽管不在同一范围内。我最终采用了这样的递归方法

.optional-conditional-class1, .optional-conditional-class2, .optional-conditional-class3 {
....
}
.concat试验{ .concat(@rest…){ ._concat(@i,@result,@rest…){ @变量:提取(@rest,@i); .-()当(@i>长度(@rest))时{ @concat:@结果; } .-()当(默认值()){ .u concat(@i+1,~{result}{var},@rest); } .-(); } (1,“,@rest); } @a:a; @b:b; @c:c; .concat(@a,@b,@c,@b,@a); concat:@concat; }
Less是一种声明性语言,因此其变量不能用于修改自身。你想解决什么任务(看起来像)?
if(a条件){concat+=a};如果(b条件){concat+=b}这是简化的js伪代码。它可以很容易地用更少的钱完成,除了。。。嗯,递归的问题。当然,我更新了问题。希望它能解释一些事情。例如,请参见(不要错过我的评论)。简言之:(目前)用更少的资源生成选择器列表的最佳方法是特性,而不是基于字符串的操作。基于字符串的选择器生成仍然是可能的(实际上没有必要进行自连接),但由于许多限制,不建议这样做(只是因为Less中的选择器不是字符串,因此基于字符串的选择器在许多情况下都会断开)。是的,我正在检查您的Less.repo,这很好,再次感谢您提供的提示。这基本上就是(请参见
cat
)在一行中所做的…;)@最多七个阶段谢谢!很遗憾,当我在谷歌上搜索“更少的css函数库”时,我没有机会偶然发现它。我会看看你的其他回购协议。我已经用
e(`(function(){return Array.prototype.slice.call(arguments).join(“,”)})(@{a},@{b})`)完成了(`(function(){return Array.prototype.slice.call(arguments)。
.concat-test {
      .concat(@rest...) {
        ._concat(@i, @result, @rest...) {
          @var: extract(@rest, @i);
          .-() when (@i > length(@rest)) {
            @concat: @result;
          }
          .-() when (default()) {
            ._concat(@i+1, ~"@{result}@{var}", @rest);
          }
          .-();
        }
        ._concat(1, "", @rest);
      }

      @a:a;
      @b:b;
      @c:c;

      .concat(@a, @b, @c, @b, @a);
      concat: @concat;
    }