。包括?当我添加相同的字符串时不会引发

时间:2014-01-26 11:26:59

标签: ruby

我希望能够在运行include之前对名称进行包装。在推送时调用它会导致一些奇怪的行为:如果它以国会大厦开头,它会将第二个Jack添加到列表中,但如果第二个Jack是小写的话,则不会添加它。如何在包含检查之前覆盖名称?

$list = []
def hand_out_gift(name)
  if $list.include?name
    raise "u can't get more than one present!"
  else
    $list.push(name.downcase)
    puts "Here you go #{name} :)"
  end
end
hand_out_gift("Jack")
hand_out_gift("Mary")
hand_out_gift("Jill")
hand_out_gift("Jack")

1 个答案:

答案 0 :(得分:1)

在功能早期将其缩小:

def hand_out_gift(name)
  key = name.downcase
  if $list.include? key
    raise "u can't get more than one present!"
  else
    $list.push key
    puts "Here you go #{name} :)"
  end
end

除此之外:避免使用像这样的全局变量。