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

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

block = do
|test| puts test
end

3.upto(8) block

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

【问题讨论】:

    标签: ruby block proc


    【解决方案1】:

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

    foo = Proc.new do |test|
      puts test
    end
    
    3.upto(8) { foo.call("hello world") }
    

    阅读有关 Procs 的更多信息:

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

    # 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:哦!对于那个很抱歉。我们有时都会误解。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-12
    • 2012-06-28
    • 2015-01-25
    • 2014-06-26
    • 1970-01-01
    • 2021-08-24
    • 2015-08-04
    相关资源
    最近更新 更多