ruby - 记忆化与惰性初始化/评估

标签 ruby

Memoizationlazy initialization 技术之间的确切区别是什么。

关于 ruby 的例子会很棒。

最佳答案

Memoization 正在保存长时间执行的结果,以便在再次调用时不会重复。

内存示例:

class A
  def initialize
  end

  def do_some_long_calculation
    @do_some_long_calculation ||= my_calc_here
  end
end

这意味着一旦我们调用do_some_long_calculation,结果将保存到@do_some_long_calculation,后续调用不会触发my_calc_here方法。

惰性初始化仅在需要时而不是在初始化对象时才执行此长时间执行。

实际上第一个代码示例也演示了惰性初始化。 非惰性初始化版本如下所示:

class A
  def initialize
    @do_some_long_calculation = my_calc_here
  end

  def do_some_long_calculation 
    @do_some_long_calculation 
  end
end

如您所见,这里我们在类 A 的 init 上立即进行冗长的计算,而在第一个示例中,我们仅在调用确切方法时才进行计算。

长计算仍然只进行一次,但是在类的初始化时而不是在显式调用时。

关于ruby - 记忆化与惰性初始化/评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26322132/

相关文章:

ruby-on-rails - gem install libv8 -v '5.3.332.38.1' ... 安装 libv8 : ERROR: Failed to build gem native extension 时出错

ruby - 是否有 Queue 的替代方案可以让您一次弹出多个结果?

php - 清理此 PHP 马尔可夫链输出?

ruby-on-rails - Emacs 中的 Ruby 导航

Ruby 函数列表文件递归

ruby-on-rails - 基于模型向路由中的正则表达式添加元素

ruby - Liquid 模板语言中的宏

ruby - 通过 cURL POST 请求向 Sinatra 发送 JSON

ruby-on-rails - Rails 使用 Paranoia 和管理,有没有办法通过用户管理来获取已删除的记录?

mysql - 对不属于表的元素进行排序