我基本上不明白这里发生了什么。下面是我的状态机。但它不起作用。它要么返回两个选择的相反值,一遍又一遍(开始)相同的选择,要么返回“未知命令”。我已经通过在各个点打印变量@next_action 的值来测试它,结果不一致。有时 case 语句的结果是instruct,但它会打印display。有时反之,有时未知命令。是的,我摆弄代码来产生这些不同的结果。但并不多。而且从来没有像预期的那样表现。
显然,我不明白我所写的逻辑。我要做的就是将 case 语句的结果作为方法调用传递并保持一切循环。我是一个红宝石新手,少数试图提供帮助的人要么以我似乎不理解的方式描述了事情,要么我在解释/展示我的内容方面做得很差我试图做。
任何帮助是极大的赞赏。
class Foo
def initialize(start_action)
@start = start_action
@users = %w(Adam Sarah Kanye)
@points = %w(100 200 300)
end
def play
puts @next_action
while true
case @next_action
when beginning
beginning
when "instruct"
instructions
when "display"
display_users
else
puts "Unknown command."
play
end
puts "\n----------"
end
end
def prompt
puts "\n----------"
print "> "
end
def beginning
puts <<-INTROTEXT
This is intro text.
INTROTEXT
prompt; @next_action = gets.chomp.to_s
end
def instructions
puts <<-INSTRUCT
These are instructions.
INSTRUCT
prompt; @next_action = gets.chomp.to_s
end
def display_users
puts "\nYour users now include:"
puts "\nName\tPoints"
puts "----\t------"
@users.each_with_index do |item, index|
puts "%s\t%s" % [item, @points[index]]
end
prompt; @next_action = gets.chomp
end
end
start = Foo.new(:beginning)
start.play