無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

・OANDA Trade APIを利用した、オープンソースのシステムトレードフレームワークです。
・自分だけの取引アルゴリズムで、誰でも、いますぐ、かんたんに、自動取引を開始できます。

ハッシュのマージ

Hash#mergeでハッシュをマージします。ブロックが渡された場合、2つのハッシュに同じキーがあった際に実行され、ブロックを評価した値が使用されます。

サンプル:

h  = {:a=>"a", :b=>{ :aa=>"aa" }, :c=>"c" }
h2 = {:x=>"x", :b=>{ :bb=>"bb" }, :c=>"c" }

# ブロックなしでマージ。競合した場合、引数側の値が使用される。
p h.merge( h2 )
puts "---"
# ブロック付きでマージ。競合した場合、ブロックが実行されその結果が使用される。
p h.merge( h2 ) { |key, self_val, othe_val|
  puts "conflict: " <<  key.to_s
  "conflict"
}

出力:

{:b=>{:bb=>"bb"}, :c=>"c", :x=>"x", :a=>"a"}
---
conflict: b
conflict: c
{:b=>"conflict", :c=>"conflict", :x=>"x", :a=>"a"}

余談

最初次のように書いていてはまりました。

def merge( h, h2 )
  return h.merge( h2 ) { |key, self_val, othe_val|
    return "conflict"
  }
end
p merge( h2, h2 )

出力:

"conflict"

関数化をやめると原因がわかります。

p h.merge( h2 ) { |key, self_val, othe_val|
    return "conflict"
}

出力:

xxx/hash_merge.rb:22: unexpected return (LocalJumpError)