Тернарное использование в FizzBuzz ++ 1.5 (codeacademy) - PullRequest
1 голос
/ 14 марта 2012

Я работал с учебными пособиями и проектами Codeacademy.На FizzBuzz ++ 1.5 они хотят, чтобы мы переписали функцию Wobble как Wob, используя троичные операторы.Я получаю сообщение об ошибке «отсутствует операнд» со следующим кодом.Также +1 в конце возврата, как это работает, javaScript сохраняет его как временное значение, потому что он не присваивается ни одной переменной.Спасибо за помощь.Код ниже.

var Wibble = {

  Wobble: function(a, b) {
    if(a===b) 
        //if the variables are equal return 0
        return 0;
    else {
        //decrement the larger of the 2 values
        if (a>b) {
            a--;
        } else {
            b--;
        }
        //call this function again with the decremented values
        //once they are equal the functions will return up the stack
        //adding 1 to the return value for each recursion
        return Wibble.Wobble(a,b)+1;
    }
  },


//This is the line of code that doesn't want to function..
  Wob: function(a, b) {
    (a===b) ? return 0 :(a<b) ? return this.Wob(a--,b)+1 : return this.Wob(a,b--)+1;
    }
 };

1 Ответ

4 голосов
/ 14 марта 2012

Следующее выражение с троичным оператором:

result = (a) ? x : y;

эквивалентно следующему:

if(a)
{
    result = x;
}
else
{
    result = y;
}

Обратите внимание на синтаксическую разницу, где в троичном операторе вы переключаетесь в присваивании, тогда как в синтаксисе оператора if вы присваиваете в переключателе.

То есть, что:

(a == b) ? return 0 : return 1;

is не эквивалентно:

if(a == b)
    return 0;
else
    return 1;

Вместо этого вы хотели бы написать:

return (a == b) ? 0 : 1;
...