Techioz Blog

Rubyでハッシュからすべてのキーと値を一度に取得する

概要

**Ruby では、ハッシュを反復処理せずに、すべてのキーと値を一度にフェッチしたいと考えています。

キーは変数とデータ型ブール値です。

新しい例では、交換可能なパラメータは var1 => true と var2 => true のみです。 したがって、ハッシュキーをキーワードとして扱う必要があります。

新しい例:

var1 = "Attr1"
var2 = "Attr2"
var3 = "Attr2"

hash = {var1 => true, var2 => true}

def method(h = {})

    puts("Works")

end


method(hash, var3 => true) #Error

古い例:

hash = {var1 => true, var2 => false}
self.some_method_i_cant_change_1(var1 => true, var2 => false, var3 => true)
self.some_method_i_cant_change_2(var1 => true, var2 => false, var3 => true)
... n methods
self.some_method_i_cant_change_n(var1 => true, var2 => false, var3 => true)

ハッシュをそのメソッドに直接渡すことはできません。

したがって、 self.some_method_i_cant_change(hash, var3 => true) は許可されません

解決策

問題を理解するのは難しいですが、理解しているように、いくつかのメソッドを呼び出し、いくつかの既存のハッシュを使用して単一の引数をハッシュとして渡す必要があります

var1 = "Attr1"
var2 = "Attr2"
var3 = "Attr3"

hsh = { var1 => true, var2 => true }

def some_method(hsh = {})
  p hsh
end
# With hashes merge
some_method(hsh.merge(var3 => true))

# Using double splat
some_method(var3 => true, **hsh)

# With mutation of original hash
hsh[var3] = true
some_method(hsh)