ハッシュ要素を抽出してローカル変数に変換するブロックを作成できますが、ネイティブメソッドが既に存在するかどうかは疑問です。PHPの抽出に相当するRubyはありますか?
extract({ :foo => 'bar', :foo2 => 'bar2' })
puts foo # 'bar'
puts foo2 # 'bar2'
このキーはプライベートであり、スコープはローカルに留まる必要があることに注意してください。
ハッシュ要素を抽出してローカル変数に変換するブロックを作成できますが、ネイティブメソッドが既に存在するかどうかは疑問です。PHPの抽出に相当するRubyはありますか?
extract({ :foo => 'bar', :foo2 => 'bar2' })
puts foo # 'bar'
puts foo2 # 'bar2'
このキーはプライベートであり、スコープはローカルに留まる必要があることに注意してください。
あなたは近くに取得することができます。
bar, bar2 = h.values_at :foo, :foo2
または私たちはできると仮定しハッシュを拡張してインスタンス変数に展開する:
class Hash
def extract o
each { |k, v| o.instance_variable_set '@' + k.to_s, v }
end
end
h.extract self
p [@foo, @foo2]
私はこのことに気づいていませんでした。ありがとうございました。しかし、たくさんの鍵があれば、それは価値がある節約では不十分です。特にキー名を変更すると、それを変更しますこの課題で2回、そしてあなたがどこでそれを使用したとしても、もう一度。あなたはローカル変数名を一般化することができますが、それは私が望んでいるものではありません。可能ではないかもしれませんが、その場合は...そうです! – glortho
これは完全に自動化された方法で更新しましたが、ローカルスコープルールに違反しています。 – DigitalRoss
Handy!私はこの種の質問には、あらゆる種類のトリックを学んでいるので、決して完全には答えられないことを願っています。 :-) – glortho
あなたは各key=>value
ペアを反復処理するeach
メソッドを使用することができます。
{ :foo => 'bar', :foo2 => 'bar2' }.each do |key, value|
print key,"\t",value,"\n"
end
出力:
foo bar
foo2 bar2
ありがとう、テディ。私はブロックでそれを行うことができることを知っています。簡単な方法を探しているだけです。 – glortho
はい、dragons、trueです。この場合、すべての私的でローカルなので、ドラゴンが少なく、かなり不快なハッシュvar名+メンバーのトンを扱います。抽出物は必要ではないがいい。 – glortho