关于可枚举:是否有倒“成员?”

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


不是你问题的答案,而是你问题的解决方案。

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

您可以查看regex:

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

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


除非您处理的元素对===有特殊意义,例如模块、正则表达式等,否则您可以很好地处理case

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