ruby - 如何在 Ruby 中缓存方法结果

标签 ruby lazy-initialization

在 Python 中,我可以轻松地修饰方法,以便它们记住它们的结果:

def store(self):
    a = line1()
    b = line2(a)
    return line3(b)

=>

from lazy import lazy

@lazy
def store(self):
    a = line1()
    b = line2(a)
    return line3(b)

Ruby 中是否有类似的只计算一次方法结果的习惯用法?

最佳答案

在 Ruby 中,这通常称为 memoization它采用以下天真的形式:

def store
  @store ||= begin
    a = line1
    b = line2(a)
    line3(b)
  end
end

但是,如果在多线程环境中使用此代码,则存在重要的问题,这就是为什么有 gem 来管理它并确保您的惰性初始化程序只运行一次,如果这是一个问题。

关于ruby - 如何在 Ruby 中缓存方法结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40047941/

相关文章:

ruby-on-rails - 具有单表继承的 Rails ActiveRecord_Associations_CollectionProxy

java - Hibernate LazyInitializingException

ios - 如何在 iOS UITableViewController 中初始化一个属性

typescript - 是否可以在 TypeScript 中解包一个可选/可为空的值?

c++ - 如何在不可变的 C++ 对象中实现延迟初始化和缓存?

ruby-on-rails - ruby 日期数学 : Why off by a day

Ruby 私有(private)和公共(public)访问器

ruby - 是否可以通过 Web 应用程序的 Java 对话框提示用户输入密码?

ruby - 如何解析文本文件并计算字符串的出现次数?

java - 从我的二级 ehcache 中检索项目后出现 "org.hibernate.LazyInitializationException"异常