是否有倒“成员?” ruby的方法?

我经常发现自己检查某些值是否属于某个集合。 据我了解,人们通常使用Enumerable#member? 为了这。

end_index = ['.', ','].member?(word[-1]) ? -3 : -2 

然而,这感觉不像Ruby中的大多数东西那么优雅。 我宁愿把这段代码写成

 end_index = word[-1].is_in?('.', ',') ? -3 : -2 

但我找不到这样的方法。 它甚至存在吗? 如果没有,任何想法为什么?

不是在ruby中,而是在ActiveSupport中 :

 characters = ["Konata", "Kagami", "Tsukasa"] "Konata".in?(characters) # => 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 

或定义

 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 

不是你的问题的答案,但也许是你的问题的解决方案。

word是一个字符串,不是吗?

您可以使用正则表达式进行检查:

 end_index = word =~ /\A[\.,]/ ? -3 : -2 

要么

 end_index = word.match(/\A[\.,]/) ? -3 : -2 

在你的具体情况下,有end_with? ,这需要多个参数。

 "Hello.".end_with?(',', '.') #=> true 

除非你正在处理对于===像模块,正则表达式等具有特殊含义的元素,否则你可以用case做得很好。

 end_index = case word[-1]; when '.', ','; -3 else -2 end