我试图在Ruby中执行方法时执行IF语句

我试图在Ruby中执行方法时执行IF语句,ruby,methods,while-loop,Ruby,Methods,While Loop,我正在为我的Ruby类编写一个淡化的21点游戏,在实现了hit或stay函数的方法之后,我挂断了。当它下面的语句时,它不会启动。希望有人能告诉我是语法错误还是缩进错误 def提示符_用户() “你想再要一张卡吗?”?按y或n' hit_stay=get.chomp 而hit|u stay='y'| |'n' 如果击中_停留==“y” 写上“你的牌是” 放入$cards.append(num()) 写上“您的总卡数为” 放入$cards.sum 返回真值 elsif hit_stay=='n' 把

我正在为我的Ruby类编写一个淡化的21点游戏,在实现了hit或stay函数的方法之后,我挂断了。当它下面的语句时,它不会启动
。希望有人能告诉我是语法错误还是缩进错误

def提示符_用户()
“你想再要一张卡吗?”?按y或n'
hit_stay=get.chomp
而hit|u stay='y'| |'n'
如果击中_停留==“y”
写上“你的牌是”
放入$cards.append(num())
写上“您的总卡数为”
放入$cards.sum
返回真值
elsif hit_stay=='n'
把“你的总数是”
放入$cards.sum
返回真值
其他的
puts“这不是一个有效的选项。”
返回错误
结束
结束
结束
这似乎是程序变得有点古怪的地方

prompt\u user()
当提示_user()='y'| |'n'

$cards.sum这不是直接回答您的问题,但首先,
prompt_user()=='y'| |'n'
可能不是您想要做的-这将始终返回true,因为它说“如果prompt_user()的结果等于'y'或'n',则执行此操作”,“n”本身只是一个字符串而不是一个条件,非空字符串的计算结果将为true,因此无论用户的输入是什么,该值始终为true。要了解我的意思,请尝试执行
操作,如果'n'
出现“hello!”,您将看到“hello!”。您可能想要的是
hit_stay='y'| | hit_stay='n'
或者更好的
['y','n']。包括?(hit_stay)

在代码的第二部分中,您到处调用
prompt\u user
,检查结果是否等于“y”或“n”,但在实际方法中返回true/false。。。我认为您要做的就是调用prompt_user,直到它返回false,在这种情况下,您可能希望更接近于此:

提示用户时

$cards.sum请始终尝试使用您正在使用的编程语言标记您的问题。这样,你就可以吸引更多相关的人关注你的问题,而不会打扰其他人,他们忽略了某些特定的标签,或者在你使用的技术方面不称职。对不起。我会为将来做笔记<代码>=
的值高于
|
。因此,
while hit_stay=='y'| |'n'
相当于
while(hit_stay=='y')| |'n'
。如果
点击_stay#=>y'
我们得到
,而true
'n'
未被检查)。如果
hit_stay
是任何其他值,
hit_stay==“y”\35;=>false
,则表达式将在“n”时缩减为
。由于
'n'
是真实的(即
nil
false
),这相当于
,而true也相当于
。因此,当
循环时,一个人将永远不会跳出