我经常发现自己检查某些值是否属于某个集合。据我所知,人们通常使用Enumerable#member?对此。
end_index = ['.', ','].member?(word[-1]) ? -3 : -2
然而,这感觉不如Ruby中的大多数东西那么优雅。我宁愿把这段代码写成
end_index = word[-1].is_in?('.', ',') ? -3 : -2
但我找不到这样的方法。它甚至存在吗?如果没有,任何想法为什么?
答案 0 :(得分:16)
不是红宝石,而是in ActiveSupport:
characters = ["Konata", "Kagami", "Tsukasa"]
"Konata".in?(characters) # => true
答案 1 :(得分:10)
您可以沿着这条线轻松定义它:
class Object
def is_in? set
set.include? self
end
end
然后用作
8.is_in? [0, 9, 15] # false
8.is_in? [0, 8, 15] # true
或定义
class Object
def is_in? *set
set.include? self
end
end
并用作
8.is_in?(0, 9, 15) # false
8.is_in?(0, 8, 15) # true
答案 2 :(得分:1)
不是您的问题的答案,但可能是您的问题的解决方案。
word
是一个字符串,不是吗?
您可以使用正则表达式进行检查:
end_index = word =~ /\A[\.,]/ ? -3 : -2
或
end_index = word.match(/\A[\.,]/) ? -3 : -2
答案 3 :(得分:1)
在您的具体情况下,end_with?有多个参数。
"Hello.".end_with?(',', '.') #=> true
答案 4 :(得分:0)
除非您正在处理对===
类似模块,正则表达式等具有特殊含义的元素,否则您可以使用case
做得非常好。
end_index = case word[-1]; when '.', ','; -3 else -2 end