如何存储 ruby​​ 代码块

Posted

技术标签:

【中文标题】如何存储 ruby​​ 代码块【英文标题】:How to store ruby code blocks 【发布时间】:2012-09-27 17:14:21 【问题描述】:

我想在变量中存储一个“代码块”以供重复使用,例如:

block = do
|test| puts test
end

3.upto(8) block

谁能告诉我我做错了什么? (或者如果这是不可能的)

【问题讨论】:

【参考方案1】:

在 Ruby 中有很多方法可以做到这一点,其中一种是使用 Proc:

foo = Proc.new do |test|
  puts test
end

3.upto(8)  foo.call("hello world") 

阅读有关 Procs 的更多信息:

http://www.reactive.io/tips/2008/12/21/understanding-ruby-blocks-procs-and-lambdas http://www.skorks.com/2010/05/ruby-procs-and-lambdas-and-the-difference-between-them/

更新,上面的方法可以改写如下:

# using lower-case **proc** syntax, all on one line
foo = proc  |test| puts test 
3.upto(8)  foo.call("hello world") 

# using lambda, just switch the method name from proc to lambda
bar = lambda  |test| puts test 
3.upto(8)  bar.call("hello world")  

它们基本上是非常相似的方法,只是有细微的差别。

最后,可能有更优雅的方法来做我所概述的事情,很高兴听到任何有更好方法的人的意见。希望这会有所帮助。

【讨论】:

非常感谢。对于链接甚至更多。你能好心地提到 lambdas 吗?出于历史目的。 @Shingetsu,我添加并更新了 lambda,以及 proc 方法的略微简化版本 @Shingetsu:Lambda 不是历史的。您几乎应该总是使用它们而不是 Procs。它们功能更全面,是标准。 @Linuxios 历史上的意思是“以后会来看帖子的人”。我阅读了该页面,发现 lambdas 更有意义。 @Shingetsu:哦!对于那个很抱歉。我们有时都会误解。

以上是关于如何存储 ruby​​ 代码块的主要内容,如果未能解决你的问题,请参考以下文章

Ruby 代码块和 Chef

在 Vim 中注释/取消注释 ruby​​ 代码块的最优雅的方式是啥?

Ruby 中的闭包-代码块

ruby中的作用域和代码块

缓存的 Ruby Haml 块返回空

Rails+React/Next.js:如何存储代码块以保持格式化?