我基本上找寫一個漂亮的方式:比較一個字符串和多個其他字符串的更好的語法是什麼?
do_something() if my_string == 'first' | my_string == 'second' | my_string == 'third'
任何想法?
我基本上找寫一個漂亮的方式:比較一個字符串和多個其他字符串的更好的語法是什麼?
do_something() if my_string == 'first' | my_string == 'second' | my_string == 'third'
任何想法?
最常見的解決方案是使用Array#include?
:
do_something if %w(first second third).include? my_string
do_something() if ['first', 'second', 'third'].include? my_string
do_something if my_string =~ /^(first|second|third)$/
如果擔心效率和/或易讀性,我建議你首先構建特殊值的一個列表一個很好的常數名稱,解釋爲什麼這些是特殊的,然後使用它:
require 'set'
SPECIAL_VALUES = Set["first", "second", "third"]
def foo(my_string)
do_something if SPECIAL_VALUES.include?(my_string)
end
如果您想處理「第一」,「第二」等情況的方式有所不同,那麼您可以使用Hash
而不是Set
。
Awww,我一直在尋找形式my_string.in%w(第一個第二個第三)的方法。我只需要扭轉我的觀點:)謝謝。 – hundredwatt 2010-07-07 20:20:48
你真的可以選擇Enumerable方法,detect是Enumerable#detect是另一個不錯的方法http://apidock.com/ruby/Enumerable/detect但是它返回nil,如果沒有找到值則返回false – 2010-07-07 20:21:09