因此,编写此代码的标准方法似乎是array.include?(object)
。但是,与object.in(array)相比,我发现很难快速阅读和理解。红宝石里有这样的东西吗?
我再次碰到的示例是(user_role是一个字符串,allowed_user_roles是一个字符串数组):
allowed_user_roles.include?(user_role)
我知道它可能是个人喜好,但是我发现这很容易阅读和理解。
user_role.in(allowed_user_roles)
答案 0 :(得分:6)
它不是在核心Ruby中,而是在ActiveSupport core extensions中添加。如果您使用Rails,则可以使用它:
1.in?([1,2]) # => true
"lo".in?("hello") # => true
25.in?(30..50) # => false
1.in?(1) # => ArgumentError
要在Rails之外使用它,您需要安装active_support
gem,然后要求active_support/core_ext/object/inclusion
:
# Gemfile
gem 'active_support'
# code
require 'active_support/core_ext/object/inclusion'
答案 1 :(得分:2)
作为一个实验,您也可以自己创建它(尽管通常不支持monkeypatching)
class Object
def in?(collection)
raise ArgumentError unless collection.respond_to?(:include?)
collection.include?(self)
end
end
然后,从Object继承的任何东西(几乎所有东西)都将具有#in?
方法。
5.in?(0..10)
=> true
'carrot'.in?(['potato', 'carrot', 'lettuce'])
=> true