jjzjj

lazy-evaluation

全部标签

ruby-on-rails - Ruby 挑战 - 方法链和惰性求值

看完文章http://jeffkreeftmeijer.com/2011/method-chaining-and-lazy-evaluation-in-ruby/,我开始寻找更好的方法链和惰性求值解决方案。我想我已经用以下五个规范概括了核心问题;谁能让他们全部通过?任何事情都可以:子类化、委托(delegate)、元编程,但不鼓励后者。最好将依赖性保持在最低限度:require'rspec'classFoo#EpiccodehereenddescribeFoodoit'shouldreturnanarraycorrespondingtothereverseofthemethodchai

ruby - Ruby 中的惰性求值

我有一个Ruby的情况,其中可能需要创建一个对象,但不确定。由于对象的创建可能代价高昂,我不太急于创建它。我认为这是延迟加载的明显案例。如何定义一个仅在有人向其发送消息时才创建的对象?该对象将在block中创建。有没有一种方法可以在Ruby中进行简单的延迟加载/初始化?这些东西是否得到某些gem的支持,它们为对象的延迟初始化的各种情况提供了不同的解决方案?感谢您的建议! 最佳答案 有两种方法。第一个是让调用者处理惰性对象创建。这是最简单的解决方案,也是Ruby代码中非常常见的模式。classExpensiveObjectdefini

ruby - 如何在 Ruby 中获得惰性数组?

我如何在Ruby中获得惰性数组?在Haskell中,我可以谈论[1..],它是一个无限列表,根据需要延迟生成。我还可以执行iterate(+2)0之类的操作,它会应用我为其提供的任何函数来生成惰性列表。在这种情况下,它会给我所有偶数。我确定我可以在Ruby中做这些事情,但似乎不知道如何做。 最佳答案 在Ruby1.9中,您可以使用Enumerator类。这是文档中的示例:fib=Enumerator.new{|y|a=b=1loop{y[1,1,2,3,5,8,13,21,34,55]此外,这是一个不错的技巧:Infinity=1.

ruby - Ruby 中有类似 Python 生成器的东西吗?

我是Ruby的新手,有没有办法从Ruby函数中yield值?如果是,如何?如果不是,我有哪些选择来编写惰性代码? 最佳答案 Ruby的yield关键字与同名的Python关键字非常不同,所以不要被它混淆。Ruby的yield关键字是调用与方法关联的block的语法糖。最接近的等效项是Ruby的Enumerator类。例如,Python的等价物:defeternal_sequence():i=0whileTrue:yieldii+=1这是:defeternal_sequenceEnumerator.newdo|enum|i=0whil

javascript - 惰性求值可以通过 monadic 类型实现吗?

我目前正在研究结合Javascript中的monad的惰性求值,以及可能从中演化出哪些用例。所以我尝试实现一个惰性类型,它实现了functor/monad类型类。相应的构造函数在其参数和结果中是惰性的。这是我想出的://alazytype//(()->a)->()->bconstLazy=thunk=>()=>thunk();//(b->a->b)->b->Lazya->bLazy.fold=f=>acc=>tx=>f(acc)(tx());//(a->b)->Lazya->LazybLazy.map=f=>tx=>Lazy(()=>f(tx()));//Lazy(a->b)->Laz

十分钟 Javascript : What is going on in this example code illustrating lazy scoping?

我一直在重读SpencerTipping的优秀作品JavascriptinTenMinutes在这个使用惰性作用域创建语法宏的示例中,我终究无法弄清楚发生了什么:varf=function(){return$0+$1};varg=eval(f.toString().replace(/\$(\d+)/g,function(_,digits){return'arguments['+digits+']'}));g(5,6);//=>11(exceptonIE)特别是,$0和$1正在被一个函数定义取代——那个函数是如何被计算的?(大概是通过eval(),但我没有看到)。函数中单个下划线参数的用

javascript - 空数组是假的,但是 [] ? 0 : 1 evaluates to 0

这个问题在这里已经有了答案:Emptyarraysseemtoequaltrueandfalseatthesametime(10个答案)关闭3年前。如果空数组[]是falsy在JavaScript中,为什么在三元运算符中用作谓词时,运算符求值为第一个选项?console.log([]==false);//printstrueconsole.log([]?0:1);//prints0!

javascript - 在 lodash.js 中,它会缓存 `.value()` 方法的结果吗?

例如,我有这样的代码(coffeescript):sortedLatLng=_(w).sortBy(x)->x.time.map(x)->[x.longitude,x.latitude].uniq((x)->x[0].toFixed(3)+","+x[1].toFixed(3))#keepthreedecimaltomergenearbypointsconsole.log(sortedLatLng.value())myFunction1(sortedLatLng.value())myFunction2(sortedLatLng.value())console.log(sortedLat

javascript - 如何在严格评估的语言中实现 protected 递归?

我在Javascript中实现了一个Scott编码的List类型以及一个模仿Semigroup类型类的重载append函数。append工作得很好,但对于大型列表,它会破坏堆栈。这是我实现的决定性部分:appendAdd("List/List",tx=>ty=>tx.runList({Nil:ty,Cons:x=>tx_=>Cons(x)(append(tx_)(ty))}));通常我使用蹦床来避免不断增长的堆栈,但这以尾递归为前提,因此在这种情况下不起作用。由于这个实现是基于Haskell的,我猜惰性求值和保护递归/尾递归模cons会有所不同:(++)[]ys=ys(++)(x:xs

javascript - Angular 5 : Lazy Loading is not working properly with ng build - -prod with Angular-CLI 1. 7.x

我在:Angular:5.2.6AngularCLI:1.7.x我的应用程序下有这个路由文件(我有一些延迟加载模块):consthomeRoutes:Routes=[{path:'home',component:HomeComponent,children:[....{path:'admin',loadChildren:'app/home/admin/admin.module#AdminModule',canActivate:[AuthGuardAdmin]},]},];@NgModule({imports:[CommonModule,RouterModule.forChild(hom