This is IT

技術、日常

【Ruby】Hashオブジェクトでもall?やnone?メソッドを使いたい

環境

WSL2 Debian12 bookworm Ruby 3.2.1

主題

値に真偽値を設定したHashオブジェクトがあるとする。

そのオブジェクトでも、all?none?を使って

{ bar: true, baz: true, foo: true }.all? #=> true
{ bar: false, baz: false, foo: false }.none? #=> true

とビシッと決めたい。

だが、all?none?をHashで使うには基本的にブロックが必要になる。

しかも、キーと値両方をブロック引数に渡さなければならない。

{ bar: true, baz: true, foo: true }.all? { |key, value| value } #=> true
{ bar: false, baz: false, foo: false }.none? { |key, value| value }#=> true

値の真偽値だけ知れればいいのに、keyもブロックに引き渡さなければならないのはちょっとダサい。

解決案

valuesメソッドを使う。

{ bar: true, baz: true, foo: true }.values.all? #=> true
{ bar: false, baz: false, foo: false }.values.none? #=> true

ビシッと決めた。