当前位置 : 主页 > 编程语言 > ruby >

如何在Ruby中缓存方法结果

来源:互联网 收集:自由互联 发布时间:2021-06-23
在 Python中,我可以轻松地修饰方法,以便记住它们的结果: def store(self): a = line1() b = line2(a) return line3(b) = from lazy import lazy@lazydef store(self): a = line1() b = line2(a) return line3(b) Ruby中是否有一些
在 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

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

网友评论