明らか||=
に動作しません
def x?
@x_query ||= expensive_way_to_calculate_x
end
なぜなら、それがまたはであることが判明した場合false
、nil
それexpensive_way_to_calculate_x
は何度も何度も実行されるからです。
Array
現在私が知っている最善の方法は、値を:に入れることです。
def x?
return @x_query.first if @x_query.is_a?(Array)
@x_query = [expensive_way_to_calculate_x]
@x_query.first
end
これを行うためのより従来的または効率的な方法はありますか?
更新私はメモ化したいと思いnil
ました-これはhttps://rails.lighthouseapp.com/projects/8994/tickets/1830-railscachefetch-does-not-work-with-false-booleanfalse
にまでさかのぼります-as-cached-value-それ以外の点では完全に正しい答えを与えてくれたAndrewMarshallに謝罪します。