1.使用||延迟初始化
def fib(n)
@result ||= []
return n if (0..1).include? n
@result[n] ||= fib(n-1) + fib(n-1)
end
2.使用无穷大Inifinity
Ruby可以使用无穷大:
irb(main):001:0> Inf = 1 / 0.0
=> Infinity
irb(main):002:0> (-Inf..Inf).include?(10)
=> true
使用Inifinity可以构造无穷大小的Lazy List:
lazyList = (0..1/0.0)
lazyList.take(100).select{|i| i % 2 == 0}
lazyList.take(100).select{rand > 0.9}
3.使用Enumerator:
fib = Enumerator.new { |y|
a = b = 1
loop {
y << a
a, b = b, a + b
}
}
fib.take(10) #=> [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
natural_numbers = Enumerator.new do |yielder|
number = 1
loop do
yielder.yield number
number += 1
end
end
#lazy select
class Enumerator
def lazy_select(&block)
Enumerator.new do |yielder|
self.each do |val|
yielder.yield(val) if block.call(val)
end
end
end
end
p natural_numbers
.lazy_select {|n| n % 47 == 0}
.lazy_select {|n| palindrome_number?(n)}
.first(5)
4.使用Fiber:
fib = Fiber.new do
f1 = f2 = 1
loop do
Fiber.yield f1
f1, f2 = f2, f1 + f2
end
end
10.times { puts fib.resume }
参考:
Lazy Enumerators in Ruby
分享到:
相关推荐
在编程语言理论中,惰性求值(英语:Lazy Evaluation),又译为惰性计算、懒惰求值,也称为传需求调用(call-by-need),是一个计算机编程中的一个概念,它的目的是要最小化计算机要做的工作。
例如,可以使用`high_chart`或`lazy_high_chart`辅助方法来创建图表,并通过传递一个哈希对象来设置图表的各种属性。这种方法使得在Rails应用中添加数据可视化变得轻而易举。 对于Sinatra这样的轻量级框架,Ruby-...
懒惰类 (Lazy Class)** 描述:一个类如果包含很少的代码,那么它可能是懒惰类。 解决方法:可以尝试将此类与其他类合并,或者为它添加更多的职责和功能。 **6. 继承问题** - **子类过于依赖父类的数据或方法**...
### Refactoring in Ruby #### 知识点概览 本文将深入探讨《Refactoring In Ruby》一书中提及的各种代码重构模式及其应用场景。该书由Lee Bogdanoff编撰,是Ruby开发人员进行代码优化和改进的重要参考。我们将逐一...
You’ll discover dozens of examples, diagrams, and illustrations that break down the functional concepts you can apply in C++, including lazy evaluation, function objects and invokables, algebraic ...
Lazy
在.NET框架中,C#语言提供了许多特性来帮助开发者优化应用程序的性能,其中之一就是`Lazy<T>`类。这个类主要用于实现延迟加载(Lazy Loading),它允许我们推迟对象的初始化,直到真正需要使用该对象时才会执行初始...
《jQuery LazyLoad 2.x API详解与应用实践》 在当今网页开发中,为了提高页面加载速度和用户体验,"懒加载"(Lazy Load)技术变得越来越重要。jQuery LazyLoad插件是一个广泛使用的解决方案,它允许图片、iframe等...
标题提到的"LazyUI-dependency"表明这是一个关于懒加载用户界面(LazyUI)的依赖集合,可能是为了帮助开发者更方便地集成到自己的项目中,尤其是对于那些不熟悉或者不喜欢使用Maven进行依赖管理的开发者。...
Further, since in our lazy strategy the classification model is in- duced on an instance-based fashion, the proposed approach can provide a better coverage of small disjuncts. Gains of up to 24% are ...
Ruby-2.2.1引入了一个名为“Just-In-Time (JIT)”的编译器,这是Ruby解释器的重大改进。JIT编译器能够将经常执行的代码片段转换为机器码,从而提高执行效率。虽然默认情况下JIT是关闭的,但可以通过配置开启,为性能...
jQuery_lazyload是一个非常实用的JavaScript库,用于优化网页性能,特别是在处理大量图片或者内容时。这个插件的主要目的是延迟加载,即在用户滚动到页面的特定部分时才加载那些可视区域以外的内容,从而减少初次...
**懒加载技术与lazyload.js详解** 懒加载(Lazy Load)是一种优化网页性能的技术,它主要应用于图片或视频等大容量资源的加载。在网页初次加载时,仅加载视口内的内容,当用户滚动页面或者靠近某个元素时,再加载...
懒加载(Lazy Load)是一种网页优化技术,主要应用于图片、视频等大容量媒体资源的加载。它的核心思想是延迟加载,即在用户滚动页面时,只加载可视区域内的元素,而不是一次性加载整个页面的所有资源。这极大地提高...
**jQuery Lazyload 图片加载技术详解** 在网页设计中,图片是重要的元素之一,但大量图片的预加载可能会拖慢页面的加载速度,影响用户体验。为了解决这一问题,jQuery 提供了一个插件——jQuery Lazyload,它允许...
Magento LazyLoad 插件是针对Magento电子商务平台设计的一款性能优化工具。它的主要功能是实现图片的延迟加载(Lazy Load),以此提升网站的加载速度和用户体验。在网页浏览时,传统方式下所有图片会一次性全部加载...
《jQuery.Lazyload.js:优化网页加载速度与用户体验的艺术》 在现代网页设计中,页面加载速度和用户体验是至关重要的因素。jQuery.Lazyload.js是一个高效实用的JavaScript插件,它能够显著提升网页加载速度,同时...
图片延迟加载(Lazy Load)是一种优化网页性能的技术,主要用于处理大量图片或多媒体资源的加载。在网页设计中,当用户滚动页面时,只有进入视口的图片才会开始加载,而那些还未显示出来的图片则会暂时保持占位符...
You’ll discover dozens of examples, diagrams, and illustrations that break down the functional concepts you can apply in C++, including lazy evaluation, function objects and invokables, algebraic ...