Код ниже работает полностью нормально, пока пользователи вводят имя метода. Я бы хотел, чтобы пользователи не вводили имя метода в различные запросы get.chomp.Ruby, Convert String Queries В вызовы метода
Я думал, что использование оператора case для перевода пользовательского ввода в вызовы методов будет работать, но я продолжаю получать .include? Ошибка NoMethodDefined.
class Foo
def initialize(start_action)
@start = start_action
end
def play
next_action = @start
while true
case next_action.include?
when beginning
next_action = beginning
when "instruct"
next_action = instructions # returns instructions as
# the method that's called below
when "users"
next_action = users # returns users as the
# method that's called below
else
puts "Unknown command."
next_action = # some placeholder method call that gets the user
# back to being able to make another choice
end
puts "\n----------"
next_action = method(next_action).call
end
def beginning
puts "This is the beginning."
next_action = gets.chomp
end
def instructions
puts "These are the instructions"
# code to display instructions omitted
next_action = gets.chomp
end
def users
puts "Here are your users"
# code to display users omitted
next_action = gets.chomp
end
end
start = Foo.new(:beginning)
start.play
Любые советы или помощь.
Ах, да. Имеет смысл. Итак, теперь я рефакторинг по вашему предложению, и я больше не получаю NoMethodError, но я, кажется, сломал цикл while. И это не признает «инструктаж» или «пользователей» действительными. Все, что я получаю, это одна Неизвестная команда, затем все, что вводится в следующее приглашение, завершает процесс. Я ожидаю, что вас снова вернут в цикл. – user2448377
Ваш текущий код не похож, что он когда-либо будет называть метод начала –
Я исправил оператор case, чтобы включить начало в качестве опции. Это на самом деле первый метод, который называется, да? Когда Foo инициализируется? Несмотря на это, даже если я набираю один из других вариантов, оператор case не распознает их. Все, что я получаю, это параметр Unknown Command. Я наберу [пользователей] в приглашении (без скобок), и аргумент case считает, что это нехорошо. – user2448377