Techioz Blog

Ruby では、シンボルがシンボルの配列内にあるかどうかを確認するにはどうすればよいですか? [閉まっている]

概要

次のことはできますか?もしそうならどうやって?

シンボルの配列があります

symbols = %w{:sym1 :sym2 :sym3} # is this correct implementation?

# I'm putting this in a function for this illustration
def check_symbol(symbol)
  symbols.include?(symbol)
end

puts check_symbol(:sym1) # expect true, but I get false
puts check_symbol(:sym44) # expect false of course

最初の put ステートメントで true を取得するにはどうすればよいですか?

解決策

シンボルの配列を %i[ … ] として指定できます。

そして、シンボルがすべて使用できるシンボルの配列に含まれているかどうかを確認するには?次のように、すべてが .is_a?(Symbol) に true で応答するかどうかを確認し、配列に特定のものが含まれているかどうかを確認します。

array_of_symbols = %i[sym1 sym2 sym3]
p array_of_symbols.all? { |e| e.is_a?(Symbol) } && array_of_symbols.include?(:sym1)
# true

今ではブロックをすべてスキップできますか? (または同様の; none?、one?、any?) テスト対象のクラスのみを渡します。

[:foo, 'foo', 1].all?(Symbol)
# => false
[:foo, :bar].all?(Symbol)
# => true