Ruby程序使用When/Case语句意外返回Nil问题排查
Ruby代码返回nil问题排查与修复
问题根源
原代码的case语句完全用错了语法:
case your_message会将your_message与每个when后的表达式结果用===匹配,但你在when里写的是your_message == your_message.include?("?")这类布尔表达式,最终when的判断值是true或false。- 输入的字符串永远不可能等于
true或false,所以所有分支都不会触发,方法默认返回nil。 - 第二个
when的!your_message == your_message.include?("?")逻辑也错误:!your_message会把非空字符串转为false,再和include?的结果比较,完全不符合需求。
修复后的代码
调整case的写法,直接在when中写条件判断(去掉case后的参数),同时调整分支顺序确保exit分支能被触发:
def stupid_coach(your_message) case when your_message.include?("?") p "Silly question, get dressed and go to work!" when your_message == "I am going to work now!" exit else p "I don't care, get dressed and go to work!" end end
说明
- 去掉
case后的your_message,此时when后直接写条件表达式,按顺序判断执行。 - 将
exit分支提前,避免被else分支拦截。 - 用
else处理所有不符合前两个条件的情况,替代原代码中错误的否定判断。
内容的提问来源于stack exchange,提问作者Panamaniac507
相关产品推荐
相关产品推荐

