是否存在一个逆';成员?';ruby中的方法?
我经常检查某个值是否属于某个集合。据我所知,人们通常使用是否存在一个逆';成员?';ruby中的方法?,ruby,enumerable,Ruby,Enumerable,我经常检查某个值是否属于某个集合。据我所知,人们通常使用Enumerable#member?来实现此目的 end_index = ['.', ','].member?(word[-1]) ? -3 : -2 然而,这感觉比Ruby中的大多数东西都不那么优雅。我宁愿把这段代码写成 end_index = word[-1].is_in?('.', ',') ? -3 : -2 但我没有找到这样的方法。它真的存在吗?如果没有,有什么想法来解释原因吗?不是用ruby,而是: 您可以通过以下方式轻松定
Enumerable#member?
来实现此目的
end_index = ['.', ','].member?(word[-1]) ? -3 : -2
然而,这感觉比Ruby中的大多数东西都不那么优雅。我宁愿把这段代码写成
end_index = word[-1].is_in?('.', ',') ? -3 : -2
但我没有找到这样的方法。它真的存在吗?如果没有,有什么想法来解释原因吗?不是用ruby,而是:
您可以通过以下方式轻松定义它:
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
或
在您的特定情况下,有一个,它接受多个参数
"Hello.".end_with?(',', '.') #=> true
除非处理对
==
有特殊意义的元素,如模块、正则表达式等,否则可以很好地处理case
end_index = case word[-1]; when '.', ','; -3 else -2 end
您还可以为成员使用别名?方法:包括?。这在你的上下文中可能会更好:['.','.].包括?(单词[-1])。@Alex谢谢,我差点忘了。看,是的,我知道我可以。但我不希望将此代码拖到每个新项目中。:-)@Sergei Tulentsev:选择权在你。那就把它放在宝石或其他东西里吧。是的,这会解决这个问题,但还有很多其他的问题,比如[:admin,:版主]。include?(当前用户。角色)这个问题是关于一般情况的,我只是在代码中粘贴了最近发生的事情。但是谢谢你的提示,我不知道这个方法。
"Hello.".end_with?(',', '.') #=> true
end_index = case word[-1]; when '.', ','; -3 else -2 end