当条件计算结果为true时,Ruby case语句不返回

时间:2017-07-06 17:24:02

标签: ruby

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 。我无法弄清楚我错过了什么。任何帮助将不胜感激。

2 个答案:

答案 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?('?')
   ...