SyntaxError: ошибка при оценке функции `unit`: первый аргумент единицы должен быть числом

Я использую less mixin, который генерирует случайное число в заданном диапазоне. вот код:

.makeRandom(@min: 0, @max: @min+1) {
  // Math.floor(Math.random() * (max - min + 1)) + min
  @getNum: `(Math.floor(Math.random() * (@{max} - @{min} + 1)) + @{min})`;
}

и Вызов другой анимации набора миксинов при вызове div:

.move (@left : 45% , @duration: 5s ,@delay : 2s) {
   animation: moveUp @duration linear @delay infinite;
   /* Safari and Chrome: */
   -webkit-animation: moveUp @duration linear @delay infinite ;
   .makeRandom(100,  400);
   margin-left:  unit(@getNum ,'px');
 }

но я получаю эту ошибку

SyntaxError: функция оценки ошибки unit: первый аргумент единицы должен быть числом

когда я пытался поменять агрегат. как я могу изменить единицу @getnum?


person Community    schedule 04.02.2014    source источник
comment
Попробуйте это: stackoverflow.com / questions / 22794231 /   -  person OZZIE    schedule 19.03.2016


Ответы (3)


Я заметил эту проблему в v1.5.

Начиная с версии 1.5 вы не можете передавать нечисловые значения (не передавая isnumber()) в такие функции, как unit(), которые принимают только числа в качестве аргументов, даже если это работало в более ранних версиях.

И - числовые значения при интерполяции javascript не распознавались как числовые по LESS ‹= 1.6.0, и isnumber(`2`); вернул бы false.

Итак, эти два вместе являются причиной того, почему числа, возвращаемые javascript, не работали в v1.5, но работали до v1.5 и снова работают в LESS v1.6.


Но если вам нужно использовать его в 1.5, вы можете «привести тип» с помощью функции, которая принимает строки или «нечисловые числа», возвращаемые интерполяцией javascript:

@str: '230'; //or `230`
@getNum: (percentage(@str)/100);

это добавляет знак процента % в конце ... но это не имеет особого значения, если вы просто хотите использовать его для числа ... так как теперь вы можете передать его любой функции, которая принимает только числа ... в вашем случае используя unit(), вы можете изменить единицу измерения на все, что захотите.

margin-left:  unit(@getNum , px);

Однако еще более простым решением в вашем случае было бы просто пропустить функцию unit() и объединить единицу с @getNum:

margin-left:  ~'@{getNum}px';

Вывод CSS в обоих случаях будет выглядеть так:

margin-left: 230px;
person Martin Turjak    schedule 04.02.2014
comment
Возможно, я неправильно понял шаг, но кажется, что ваш обходной путь LESS 1.5 все еще не работает с генерацией случайных чисел, поскольку он создает NaN. Я считаю, что это проблема с javascript, возвращающим анонимное значение, которое v.1.5 не может обрабатывать должным образом. - person ScottS; 04.02.2014
comment
@ScottS Я попробовал еще раз на less2css.org ... и, похоже, все работает нормально (с v1.3.2 до 1.6.0). Я использовал точный код OP сверху и обернул его процентной функцией @getNum: (percentage(`(Math.floor(Math.random() * (@{max} - @{min} + 1)) + @{min})`)/100); ... и получил любое произвольное случайное число. - person Martin Turjak; 04.02.2014
comment
Хорошо, я подтверждаю, что это хорошо. Когда я проверял, у меня была скобка в неправильном положении. Так что я был недоразумением (в каком-то смысле). - person ScottS; 04.02.2014

Я не уверен, было ли это и в вашем случае, но поскольку я попал на эту страницу в поисках ответа на ту же ошибку примерно 4 года спустя, я решил опубликовать это здесь, чтобы он мог помочь кому-то еще в том же затруднительном положении ????.

Итак, в нашем случае мы получали эту ошибку в таких выражениях:

width: unit(@navbarHeight - 0.1, em);

И решение заключалось в том, чтобы просто заключить математическое выражение (в данном случае вычитание) в круглые скобки, например:

width: unit((@navbarHeight - 0.1), em);

person AsGoodAsItGets    schedule 04.06.2018

@AsGoodAsItGets прав, как указано в журнале изменений 4.0.

Круглые скобки требуются (по умолчанию) вокруг выражений, подобных делению, для принудительной математической оценки.

person liby    schedule 21.12.2020
comment
Привет и добро пожаловать в SO! Прочтите тур и Как сделать Пишу хороший ответ? - person Tomer Shetah; 21.12.2020