Is there an inverse 'member?' method in ruby?
我经常发现自己在检查某个值是否属于某个集合。据我所知,人们通常使用可枚举成员?为此。
1 | end_index = ['.', ','].member?(word[-1]) ? -3 : -2 |
然而,这感觉比Ruby中的大多数东西都要淡雅一点。我宁愿把这个代码写成
1 | end_index = word[-1].is_in?('.', ',') ? -3 : -2 |
但我找不到这样的方法。它还存在吗?如果没有,为什么有什么想法?
不是在Ruby中,而是在ActiveSupport中:
1 2 | characters = ["Konata","Kagami","Tsukasa"] "Konata".in?(characters) # => true |
您可以沿着这条线轻松地定义它:
1 2 3 4 5 | class Object def is_in? set set.include? self end end |
然后使用
1 2 | 8.is_in? [0, 9, 15] # false 8.is_in? [0, 8, 15] # true |
或定义
1 2 3 4 5 | class Object def is_in? *set set.include? self end end |
并用作
1 2 | 8.is_in?(0, 9, 15) # false 8.is_in?(0, 8, 15) # true |
在你的特定情况下,有没有结束?,它接受多个参数。
1 | "Hello.".end_with?(',', '.') #=> true |
不是你问题的答案,而是你问题的解决方案。
您可以查看regex:
1 | end_index = word =~ /\A[\.,]/ ? -3 : -2 |
或
1 | end_index = word.match(/\A[\.,]/) ? -3 : -2 |
除非您处理的元素对
1 | end_index = case word[-1]; when '.', ','; -3 else -2 end |