是否有倒"成员?" 红宝石的方法?

Ser*_*sev 10 ruby enumerable

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

end_index = ['.', ','].member?(word[-1]) ? -3 : -2
Run Code Online (Sandbox Code Playgroud)

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

end_index = word[-1].is_in?('.', ',') ? -3 : -2
Run Code Online (Sandbox Code Playgroud)

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

Vas*_*ich 17

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

characters = ["Konata", "Kagami", "Tsukasa"]
"Konata".in?(characters) # => true
Run Code Online (Sandbox Code Playgroud)


und*_*gor 10

您可以沿着这条线轻松定义它:

class Object
  def is_in? set
    set.include? self
  end
end
Run Code Online (Sandbox Code Playgroud)

然后用作

8.is_in? [0, 9, 15]   # false
8.is_in? [0, 8, 15]   # true
Run Code Online (Sandbox Code Playgroud)

或定义

class Object
  def is_in? *set
    set.include? self
  end
end
Run Code Online (Sandbox Code Playgroud)

并用作

8.is_in?(0, 9, 15)   # false
8.is_in?(0, 8, 15)   # true
Run Code Online (Sandbox Code Playgroud)