4 votes

Y a-t-il quelque chose en ruby comme object.in(array) ?

Donc la façon standard d'écrire ceci semble être array.include?(object) . Cependant, je trouve cela beaucoup plus difficile à lire et à comprendre rapidement par rapport à object.in(array). Existe-t-il quelque chose de ce genre dans ruby ?

L'exemple que je viens de retrouver était (user_role est une chaîne, et allowed_user_roles est un tableau de chaînes) :

allowed_user_roles.include?(user_role)

Je sais que c'est probablement une préférence personnelle, mais je trouve cela beaucoup plus facile à lire et à comprendre.

user_role.in(allowed_user_roles)

6voto

mrzasa Points 1589

Il n'est pas dans le noyau de Ruby, mais il est ajouté dans Extensions de base d'ActiveSupport . Si vous utilisez Rails, vous disposez de cette possibilité :

1.in?([1,2])        # => true
"lo".in?("hello")   # => true
25.in?(30..50)      # => false
1.in?(1)            # => ArgumentError

Pour l'utiliser en dehors de Rails, vous devez installer active_support et ensuite exiger active_support/core_ext/object/inclusion :

# Gemfile
gem 'active_support'

# code
require 'active_support/core_ext/object/inclusion'

2voto

SteveTurczyn Points 25202

À titre expérimental, vous pouvez également créer ceci vous-même (bien que le monkeypatching soit généralement mal vu).

class Object
  def in?(collection)
    raise ArgumentError unless collection.respond_to?(:include?)
    collection.include?(self)
  end
end

Ainsi, tout ce qui hérite d'Object (c'est-à-dire à peu près tout) aura un objet #in? méthode.

5.in?(0..10)
=> true

'carrot'.in?(['potato', 'carrot', 'lettuce'])
=> true

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X