将多个字符串传递给ruby starts_with?

时间:2015-01-22 14:09:48

标签: ruby-on-rails ruby string

我有这段代码

if self.name.starts_with?('Bronze') || self.name.starts_with?('Silver') ||self.name.starts_with?('Gold')

有没有办法一次性传递所有这些字符串而不是大量的OR,因为我可能需要对此进行扩展?

2 个答案:

答案 0 :(得分:21)

String#start_with?接受任意数量的参数。您无需使用||

'Silver medal'.start_with?('Bronze', 'Silver', 'Gold')
# => true
'Hello medal'.start_with?('Bronze', 'Silver', 'Gold')
# => false

答案 1 :(得分:1)

不,start_with采用字符串或正则表达式。

我发现不断扩大的正则表达式很烦人。

直到我发现自己是totally wrong as per @falsetru,我才这样做:

%w[Bronze Silver Gold].any? { |s| name.start_with? s }

我将这些单词数组放入变量或常量(或者我认为的方法)中。

然后,我将逻辑放入一个方法,无论它是name属性,它的名称取决于上下文。这使得这个通常可测试,可扩展和封装。

def precious_metal?
    self.name.starts_with? precious_metals
end

...

if precious_metal?
  # Some logic
end