メモリ内キャッシュを作成するためのRubyハッシュトリック
この短いポストでは、メモリ内の計算結果を記憶するためのスマートトリックをお見せしたいと思います.場合によっては、再利用のためにメモリに複数の操作の結果を格納する必要があり、典型的には
例えば、スターウォーズ文字が暗い側からのかどうかをチェックするためのメソッドがあるとしましょう.
ここで結果をどのように記述できるかの1つの可能性があります.
このソリューションをチェックアウト、それは純粋なルビーの美しさではないか.💅
Hash
インスタンス.例えば、スターウォーズ文字が暗い側からのかどうかをチェックするためのメソッドがあるとしましょう.
def dark_side?(character_name)
StarWars::Character.find_by(name: character_name).dark_side?
end
このメソッドは重いので、与えられた入力の結果を得るためにDBクエリを実行する必要があるので、何度も呼び出す必要があるかもしれませんcharacter_name
将来の使用のために結果を格納することは意味があるかもしれません.ここで結果をどのように記述できるかの1つの可能性があります.
def dark_side?(character_name)
@dark_side_cache ||= {}
@dark_side_cache[character_name] = StarWars::Character.find_by(name: character_name).dark_side? unless @dark_side_cache.key?(character_name)
@dark_side_cache[character_name]
end
しかし、ルビーのHash
良いですconstructor ブロックを渡すことのできるバリアント.このソリューションをチェックアウト、それは純粋なルビーの美しさではないか.💅
def dark_side?(character_name)
@dark_side_cache ||= Hash.new do |hash, char_name|
hash[char_name] = StarWars::Character.find_by(name: char_name).dark_side?
end
@dark_side_cache[character_name]
end
Reference
この問題について(メモリ内キャッシュを作成するためのRubyハッシュトリック), 我々は、より多くの情報をここで見つけました https://dev.to/bajena/ruby-hash-trick-for-creating-an-in-memory-cache-j6jテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol