次のシナリオを考えてみましょう。配列に入れてjsonに変換する必要のある大きなハッシュがかなりあります。
hash1 = { ... big hash ... }
hash2 = { ... big hash ... }
hash3 = { ... big hash ... }
array = [hash1, hash2, hash3]
json = JSON.dump(array)
問題は、それらのハッシュからjsonを生成するのに時間がかかることです。そのため、キャッシュしたいと思います。ただし、配列全体をキャッシュすることはできず、個別のアイテムのみをキャッシュできます。明らかに、キャッシュされたjson文字列を配列に入れると悪い結果になります:
hash1 = {:a => 1}
hash1json = JSON.dump(hash1)
array = [hash1json]
JSON.generate(array)
==> ["{\"a\":1}"]
私が必要な間
==> [{"a":1}]
私が考えることができる唯一の方法は、次のようなことをすることです。
"[#{[hash1json].join(",")}]"
==> [{"a":1}]
この特定のケースではこれで十分かもしれませんが、単純な配列ではなく深層構造をキャッシュしたい場合は、はるかに困難になります。