Как конвертировать эту функцию из as3 в javascript - PullRequest
0 голосов
/ 07 августа 2011

Я немного новичок в javascript, поэтому я не уверен, как переписать эту функцию, написанную в actionscript3, на js:

function map(v:Number, a:Number, b:Number, x:Number = 0, y:Number = 1):Number {
    return (v == a) ? x : (v - a) * (y - x) / (b - a) + x;
}

Как бы это выглядело в javascript? И какие именно причины, по которым это сейчас не работает?

Ответы [ 3 ]

5 голосов
/ 07 августа 2011

Это должно работать в JS, если вы уберете все данные типа, но вам нужно будет проверить эти значения аргументов по умолчанию, потому что аргументы по умолчанию не поддерживаются.

function map(v, a, b, x, y) {
    if(x == undefined || isNaN(x)) x = 0;
    if(y == undefined || isNaN(y)) y = 1;
    return (v == a) ? x : (v - a) * (y - x) / (b - a) + x;
}

Чтобы конкретно ответить на последнюю часть вашего вопроса, есть две проблемы, которые мешают вашему коду работать как JavaScript:

  1. JavaScript является свободно типизированным языком, и поэтому объявление типов в аргументах функций недопустимо. Чтобы избежать неожиданных ошибок, вы можете проверить каждый аргумент и выдать ошибку не того типа, который вам нужен.
  2. JavaScript не позволяет указывать аргументы по умолчанию, но допускает опускание аргументов функции. Это отличается от ActionScript, когда отсутствие аргумента без значения по умолчанию вызовет ошибку. Способ справиться с этим - проверить аргументы на неопределенность и установить значения там, где это необходимо.

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

2 голосов
/ 07 августа 2011

Javascript не имеет типов во время компиляции.Удалите все :Number, и все будет в порядке.

(К сожалению, пропущены значения параметров по умолчанию, как отмечено в других ответах)

0 голосов
/ 07 августа 2011
function map(v,a,b,x,y){
  if(x===undefined)x=0;
  if(y===undefined)y=1;
  return (v==a)?x:(v-a)*(y-x)/(b-a)+x;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...