Module: Locale::Util
Child modules and classes
Module Locale::Util::Memoizable
Aliases
Old name | New name |
---|---|
freeze | freeze_without_memoizable |
Public Class Methods
included (base)
# File lib/locale/util/memoizable.rb, line 13 13: def self.included(base) 14: mod = self 15: base.class_eval do 16: extend mod 17: end 18: end
Public Instance Methods
clear ()
Clear memoized values.
# File lib/locale/util/memoizable.rb, line 29 29: def clear 30: @_memoized_ivars = {} 31: end
memoize (*symbols)
Cache the result of the methods.
include Memoizable def foo ...... end def bar(a, b) ...... end memoize :foo, :bar(a, b)
To clear cache, clear_foo, clear_bar is also defined.
(NOTE) Consider to use this with huge objects to avoid memory leaks.
# File lib/locale/util/memoizable.rb, line 47 47: def memoize(*symbols) 48: symbols.each do |symbol| 49: original_method = "_unmemoized_#{symbol}" 50: memoized_ivar = MEMOIZED_IVAR.call(symbol) 51: class_eval "raise \"Already memoized \#{symbol}\" if method_defined?(:\#{original_method})\nalias \#{original_method} \#{symbol}\n\ndef \#{symbol}(*args)\n@_memoized_ivars ||= {}\n@_memoized_ivars[:\#{memoized_ivar}] ||= {}\n\nkey = args.hash\n\nret = @_memoized_ivars[:\#{memoized_ivar}][key]\n\nif ret\nret\nelse\n@_memoized_ivars[:\#{memoized_ivar}][key] = \#{original_method}(*args).freeze\nend\nend\n\n", __FILE__, __LINE__ 52: end 53: 54: end