Ruby新手在这里。我写了一个case语句来检查字符串参数是否以“?”结尾,我不明白结果。这是我的代码:
class Bob
def self.hey(phrase)
case phrase
when phrase.chars.last == "?"
'Sure.'
else
'Whatever.'
end
end
end
当我致电Bob.hey("Does this cryogenic chamber make me look fat?")
时,我会回复随便。,尽管"Does this cryogenic chamber make me look fat?".chars.last == "?"
在IRB中评估 true 。我无法弄清楚我错过了什么。任何帮助将不胜感激。
答案 0 :(得分:2)
case
语句有两种形式,一种是您指定case expr
而另一种是您指定的expr
。在第一种形式中,===
值针对具有if
的所有分支进行测试。在第二种形式中,每个分支的评估类似于case
。
这意味着有两种方法可以解决这个问题。从def self.hey(phrase)
case
when phrase.chars.last == "?"
'Sure.'
else
'Whatever.'
end
end
部分删除该术语:
case
或切换def self.hey(phrase)
case phrase.chars.last
when "?"
'Sure.'
else
'Whatever.'
end
end
以关注重要部分:
def self.hey(phrase)
case phrase
when /\?\z/
'Sure.'
else
'Whatever.'
end
end
另一种方法是使用正则表达式:
/\?\z/
其中***
表示“字符串末尾的问号字符。
答案 1 :(得分:1)
如果只有两种情况,if/else
绰绰有余:
if phrase.chars.last == "?"
...
else
...
end
请注意,您可以使用end_with?
:
if phrase.end_with?('?')
...