Почему return пропускает значение, созданное в моем тернарном операторе?

У меня есть этот код:

def FirstFactorial(num)

  num == 0 ? 1 : num * FirstFactorial(num - 1)
  return num

end

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


person Shawn    schedule 23.06.2015    source источник
comment
У вас слишком много знаков равенства.. num = 0 ? 1 : num....   -  person Buddy    schedule 24.06.2015


Ответы (3)


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

def FirstFactorial(num)

  return (num == 0 ? 1 : num * FirstFactorial(num - 1))

end
person Ely    schedule 23.06.2015
comment
Благодарю вас! Я продолжал помещать оператор в квадратные скобки вместо скобок. - person Shawn; 24.06.2015
comment
Пожалуйста. Не стесняйтесь принимать ответ, если он решил проблему. И помните, меньше пейте кофе, больше спите :-P - person Ely; 24.06.2015
comment
:P Я собирался, но мне сказали, что я должен ждать не менее 12 минут.. бу! уже 5 минут :) - person Shawn; 24.06.2015

Просто добавьте как можно более краткий ответ для потомков:

Ruby использует неявный возврат в последней строке объявления вашего метода.

Таким образом:

def FirstFactorial(num)

  num == 0 ? 1 : num * FirstFactorial(num - 1)

end
person Collin Graves    schedule 23.06.2015
comment
возврату должно быть стыдно за себя! - person user12341234; 24.06.2015
comment
Ах! Простота превыше всего, спасибо за помощь :) - person Shawn; 24.06.2015

Вам нужно установить num равным результату тернарного оператора. Или просто верните его, как в ответе Эльясина.

def FirstFactorial(num)

  num = num == 0 ? 1 : num * FirstFactorial(num - 1)
  return num

end

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

def FirstFactorial(num)

  num == 0 ? 1 : num * FirstFactorial(num - 1)

end
person wrhall    schedule 23.06.2015