Неправильное описание дела - PullRequest
1 голос
/ 12 июля 2010

Я еще бездельничаю в Руби. У меня есть файл, содержащий класс с двумя методами и следующий код:

if __FILE__ == $0

  seq = NumericSequence.new

  puts "\n1. Fibonacci Sequence"
  puts "\n2. Pascal\'s Triangle"
  puts "\nEnter your selection: "
  choice = gets
  puts "\nExcellent choice."

  choice = case
  when 1
    puts "\n\nHow many fibonacci numbers would you like? "
    limit = gets.to_i
    seq.fibo(limit) { |x| puts "Fibonacci number: #{x}\n" }
  when 2
    puts "\n\nHow many rows of Pascal's Triangle would you like?"
    n = gets.to_i
    (0..n).each {|num| seq.pascal_triangle_row(num) \
       {|row| puts "#{row} "}; puts "\n"}
  end

end

Почему, если я запускаю код и поставляю вариант 2, он все равно запускает первый случай?

Ответы [ 2 ]

5 голосов
/ 12 июля 2010

Ваш case синтаксис неправильный. Должно быть так:

case choice
  when '1'
    some code
  when '2'
    some other code
end

Взгляните здесь .

Вам также необходимо сравнить вашу переменную со строками, так как gets читает и возвращает пользовательский ввод в виде строки.

1 голос
/ 12 июля 2010

Ваша ошибка заключается в следующем: choice = case должно быть case choice.

Вы предоставляете инструкцию case без объекта "default", поэтому первое предложение, when 1, всегда возвращает true.

По сути, вы написали: choice = if 1 then ... elsif 2 then ... end

И, как упоминал Младен, сравнивайте строки со строками или конвертируйте в int: choice = gets.to_i

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...