2015-05-22 3 views
-1

ЭтоМЕНЬШЕ переменные сама конкатенация

.a { 
    @a: 1; 
    @b: 2; 
    @concat: @a; 
    @concat: ~"@{concat}@{b}"; 
    margin: @concat; 
} 

выдает ошибку.

Syntax error: too much recursion

Однако это

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

будет работать.

Есть ли уловка, чтобы объединить строку с собой только с МЕНЬШЕ (без concat1, concat2 и т. Д. Переменных)?

Обратите внимание, что приведенный выше код не является предметом для упрощения, поскольку он будет использовать условные обозначения. Код должен генерировать

.optional-conditional-class1, .optional-conditional-class2, .optional-conditional-class3 { 
.... 
} 

в моде в similar петли. Вот почему я хочу создать конкатенированную строку со списком классов.

+2

Меньше - это декларативный язык, поэтому его переменные не могут использоваться для изменения самих себя. Какую задачу вы пытаетесь решить (выглядит как [XY Problem] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem))? –

+0

'if (aCondition) {concat + = a}; if (bCondition) {concat + = b}; 'Это упрощенный псевдокод js. Это можно легко сделать с МЕНЬШЕЙ, кроме ... ну, рекурсии. – estus

+0

Несомненно, я обновил вопрос. Надеюсь, что это что-то объясняет. – estus

ответ

1

Да, по существу, это возможно, хотя и не в том же объеме. Я закончил с рекурсивным подходом, подобным этому

 
    .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; 
    } 
+0

Это в основном то, что ['less-plugin-lists: join'] (https://github.com/seven-phases-max/less-plugin-lists/blob/master/docs/ref.md#join) (см. также 'cat') делает в одной строке ...;) –

+0

@ seven-phase-max Спасибо! Жаль, что у меня не было шанса наткнуться на него, когда googling «less css functions lib». Я посмотрю на ваши другие репозитории. Я уже сделал это с помощью 'e (\' (function() {return Array.prototype.slice.call (arguments) .join (",")}) (@ {a}, @ {b}) \ ') ', но хотел воссоздать его только с МЕНЬШЕ. – estus

Смежные вопросы