これは本質的に@sherbrowの答えと同じですが、もう少し簡潔でエラーはありません。これは、彼の正しい答えを裏付ける長い説明コメントだと考えてください。コメントに収まりきらないほどです。
このようなLESS ループmixin を中間ヘルパーとして使用し、生成するクラスの数を指定して呼び出します。.column-1、.column-2、およびを行う方法は次のとおり.column-3です。4 列まで移動したい場合: [9 行目].columns(4)の代わりに実行します。.columns(3)5 列まで移動するには、 を実行します.columns(5)。
1    // we'll call this if we want to build columns
2    .columns(@i) when (@i > 0) {
3      .column-@{i} {
4        .col(@i)
5      }
6      .columns(@i - 1)
7    }
8    // for example, here we build columns 1-3
9    .columns(3);
の結果にコンパイルされます
.column-1 {.col(1)}
.column-2 {.col(2)}
.column-3 {.col(3)}
(あなたの質問は既に mixin.col(@x)があると仮定しているので、私もそれを仮定しています。その余分なステップをスキップする方法については、4を参照してください。)
何が起こっているかは次のとおりです。
- 最初のチャンク全体 [1 ~ 7 行目] は、呼び出されるまでそのままです。
- .columns(3)[9 行目] は- .columns(@i)mixin [2 行目] に送信し、変数- @iに valueを割り当てます- 3。
- @i(3) は 0 より大きい [2 行目] ため、ガードを満たし、[ 2行目]を通過でき- {ます。
- .column-@{i} {...}[3-5 行目] は、この mixin が出力するものです。- 
- @iは 3 なので、出力は次のようになります。- .column-3 {.col(3)}
- 構文@{i}は、変数の値を文字列として挿入するために使用されます
- 他の場所で使用する必要がない場合は.col(@x)、ここにスタイルを直接ドロップすることもできます (例: @sherbrow)。.column-@{i} {width: @i * 10px}
 
- そして、ループ: 3 行目から 5 行目をコンパイルした後、この mixin を再度呼び出しますが、値は異なります [6 行目]: .columns(@i - 1)==>.columns(3 - 1)==>.columns(2)。
- トップに戻る [行 2]: @i、現在 2 は 0 よりも大きいため、入力が許可されてい.column-2 {.col(2)}ます。.col(2).column-2 { the.col(2)styles }
- @iそして、 が 0 より大きくなくなるまで出力とループを続けます (つまり、 の後に停止し- .columns(1)ます)。