如何存储 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 代码块的主要内容,如果未能解决你的问题,请参考以下文章