Tag: lambda

与Ruby相比,Python的限制:lambda

我正在浏览WikiVS的一些页面,我引用了: 因为Python中的lambdas仅限于表达式,不能包含语句 我想知道这个限制将是一个很好的例子(或更多),最好是与Ruby语言相比较。 感谢您的回答,评论和反馈!

我可以使用Ruby从内部引用lambda吗?

我希望能够使用Ruby从内部调用匿名lambda。 考虑以下递归块(返回阶乘)。 我知道我可以将它分配给变量,并且该变量在lambda的范围内: fac = lambda { |n| n == 1 ? 1 : n * fac.call(n – 1) } fac.call(5) 但是,我希望能够做到以下(因为没有实际原因,我只是对探索语言感兴趣): (lambda { |n| n == 1 ? 1 : n * self.call(n – 1) }).call(5) 我知道那是行不通的,因为self是main对象。 我做错了吗? 我是否尝试做一些不可能的事情 – 如果不是,这是因为某些理论上的限制还是仅仅是在Ruby中没有实现?

Ruby函数与方法

在Ruby Programming Language ,第6章(第2段)中,他们指出: 许多语言区分没有关联对象的函数和在接收器对象上调用的方法。 因为Ruby是纯粹面向对象的语言,所以所有方法都是真正的方法,并且至少与一个对象相关联。 然后在第6段的中间: procs和lambdas都是函数而不是在对象上调用的方法。 我对这些陈述有点困惑。 Ruby是纯粹的纯OO,因此没有与对象无关的函数(如果这是纯OO的有效定义),或者是与Proc对象关联的procs / lambdas? Ruby中的函数和方法有什么区别? 任何帮助解析和理解这将是值得赞赏的。

rubylambda语境

假设我在最顶层有以下ruby定义 callable = lambda {“#{hi}”} 并且假设稍后我创建了一个名为temp的对象,该对象具有一个名为hi的方法。 现在我想做的是在temp的上下文中调用callable 。 我试过了 temp.instance_eval do callable.call end 但这给了我错误“ NameError: undefined local variable or method ‘hi’ for main:Object ”。 我想知道是否有任何方法可以将callable的上下文重新绑定到temp以便我不会收到错误消息? 我知道我可以在main:Object上定义method_missing并将所有方法调用重新路由到temp但这似乎太糟糕了,无法实现我想要的东西。

如何在Ruby中编组lambda(Proc)?

Joe Van Dyk 询问了Ruby邮件列表 : 嗨, 在Ruby中,我猜你不能编组一个lambda / proc对象,对吗? 在lisp或其他语言中这可能吗? 我想做什么: l = lamda { … } Bj.submit “/path/to/ruby/program”, :stdin => Marshal.dump(l) 所以,我向BackgroundJob发送一个lambda对象,其中包含要执行的操作的上下文/代码。 但是,猜测这是不可能的。 我最终编组了一个普通的ruby对象,其中包含程序运行后要执行的操作的说明。 乔

你如何串行化/序列化Ruby代码?

我希望能够在我的Ruby代码中编写lambda / Proc,将其序列化以便我可以将其写入磁盘,然后再执行lambda。 有点像…… x = 40 f = lambda { |y| x + y } save_for_later(f) 后来,在一个单独的Ruby解释器运行中,我希望能够说…… f = load_from_before z = f.call(2) z.should == 42 Marshal.dump不适用于Procs。 我知道Perl有Data :: Dump :: Streamer ,在Lisp中这很简单。 但有没有办法在Ruby中做到这一点? 换句话说,以后会save _ for _ later实现什么? 编辑 : 我的答案很好,但它不会关闭自由变量(如x )并将它们与lambda序列化。 所以在我的例子中…… x = 40 s = save_for_later { |y| x + […]

Ruby:将proc转换为lambda?

是否有可能将proc-flavored Proc转换为lambda风味的Proc? 有点惊讶,这不起作用,至少在1.9.2: my_proc = proc {|x| x} my_lambda = lambda &p my_lambda.lambda? # => false!

在块/ lambda中产生麻烦

我有以下Ruby代码: # func1 generates a sequence of items derived from x # func2 does something with the items generated by func1 def test(x, func1, func2) func1.call(x) do | y | func2.call(y) end end func1 = lambda do | x | for i in 1 .. 5 yield x * i end end func2 = lambda […]