60447


Rubyについての質問です。  
要素が配列に含まれているかどうか調べる時に、要素, 配列の順番に書けるような書き方はありますか？

具体的には

[code]

    if [:dog, :cat, :monkey].include? :monkey
      puts "banana"
    end
    
[/code]

の代わりに、

[code]

    if (:monkey).is_in [:dog, :cat, :monkey]
      puts "banana"
    end
    
[/code]

みたいな書き方です。いい方法があったら教えてください。


CC BY-SA 4.0
2019-11-12T06:46:36.103
60446
2019-11-12T07:27:00.473
32772
question
ruby
要素が配列に含まれているかどうか調べる時に、要素, 配列の順番に書けるような書き方はありますか？


もし、ActiveSupport がある環境であれば `Object#in?` が使えます。

[code]

    :monkey.in? [:dog, :cat, :monkey]
    => true
    
[/code]

<https://github.com/rails/rails/blob/v3.2.12/activesupport/lib/active_support/core_ext/object/inclusion.rb#L13>


CC BY-SA 4.0
2019-11-12T06:52:48.117
60447
2019-11-12T06:52:48.117
29695
60446
answer


Object クラスに `is_in` メソッドを追加するという方法もあります。

[code]

    class Object
      def is_in(arg)
        arg.include?(self)
      end
    end
    
[/code]

[code]

    if (:monkey).is_in [:dog, :cat, :monkey]
      puts "banana"
    end
    => banana
    
    "or".is_in "Hello World"
    => true
    
[/code]


CC BY-SA 4.0
2019-11-12T07:27:00.473
60449
2019-11-12T07:27:00.473
60446
answer