如何存储ruby代码块

21 ruby block proc

我想在要重用的变量中存储"代码块",例如:

block = do
|test| puts test
end

3.upto(8) block
Run Code Online (Sandbox Code Playgroud)

有人能告诉我我在做什么这么显然是错的吗?(或者,如果这是不可能的)

ste*_*och 31

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

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

3.upto(8) { foo.call("hello world") }
Run Code Online (Sandbox Code Playgroud)

阅读有关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") } 
Run Code Online (Sandbox Code Playgroud)

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

最后,可能有更优雅的方式来做我已经概述的事情,很高兴听到任何人有更好的方式.希望这可以帮助.

  • @Shingetsu:Lambdas不是历史性的.你应该*总是*使用它们而不是Procs.它们功能更齐全,是标准配置. (3认同)
  • 非常感谢.对于链接更多.你是否可以如此善良地提及lambda?出于历史目的. (2认同)