Ruby on Rails-除非有多个条件

Dar*_*use 5 ruby string methods ruby-on-rails gsub

我试图替换一个表达式,除非该表达式是两个值之一。

def substitute_string (string)
  string.gsub('abc', 'xyz') unless string == ('dabc' || 'eabc')
end

substitute_string('jjjjjabc')
=> 'jjjjjxyz'

substitute_string('dabc')
=> 'dabc'

substitute_string('eabc')
=> 'exyz'
Run Code Online (Sandbox Code Playgroud)

我希望replace_string('eabc')返回('eabc'),因为我在除非块中声明了该值,并传递了两个值。

我不明白为什么这行不通,并且我可以做些什么来使'eabc'返回'eabc'。

Log*_*man 2

('dabc' || 'eabc')是一个布尔表达式,其计算结果为true并返回“dabc”。

使用两个或:

unless string == 'dabc' || string == 'eabc'

或者使用=~(正则表达式模式匹配)

unless string =~ /(dabc|eabc)/

既然您表明您正在使用 Rails,您也可以in?像这样使用:

unless string.in? ['dabc', 'eabc']