使用“包含?”检查字符串中是否有空格

时间:2018-10-01 19:18:48

标签: ruby

我正在测试名称@fm1是否带有空格(因为狗没有姓氏)。

def family_member?
  if @fm1.include?(" ")
    puts @fm1.split(/ |\_|\-/).map(&:capitalize).join(" ") + " is a puppy!"
  elsif @fm1.include?("schnider")
    puts @fm1.split(/ |\_|\-/).map(&:capitalize).join(" ") + " is Schnider's member."
  else
    puts @fm1.split(/ |\_|\-/).map(&:capitalize).join(" ") + " is a guest."
  end
end

当我执行if @fm1.include?(" ")时,它将显示else之后的结果。我想知道是否有任何方法。你能帮我完成这个吗?

1 个答案:

答案 0 :(得分:1)

使用Ruby的最case和正则表达式:

def family_member_text
  name = @fm1.split(/ |\_|\-/).map(&:capitalize).join(" ")

  case (@fm1)
  when /\s/
    "#{name} is a puppy!"
  when /schnider/i
    "#{name} is Schnider's member."
  else
    "#{name} is a guest."
  end
end

此方法在哪里返回您可以但不必须输入puts的文本,这导致了更多模块化代码设计。记住您的SOLID principles

请注意,我在这里还应用了DRY(不要重复自己)来清理重复的名称规范化代码。这也可能是错误的,因为“ Leonardo da Vinci”之类的名字没有大写字母“ Da”。