我正在测试名称@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
之后的结果。我想知道是否有任何方法。你能帮我完成这个吗?
答案 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”。