Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何存储ruby代码块_Ruby_Block_Proc - Fatal编程技术网

如何存储ruby代码块

如何存储ruby代码块,ruby,block,proc,Ruby,Block,Proc,我想在要重用的变量中存储一个“代码块”,例如: block = do |test| puts test end 3.upto(8) block 有人能告诉我我做错了什么吗?(或者如果这是不可能的)在Ruby中有很多方法可以做到这一点,其中之一就是使用Proc: foo = Proc.new do |test| puts test end 3.upto(8) { foo.call("hello world") } 了解有关Procs的更多信息: 更新后,上述

我想在要重用的变量中存储一个“代码块”,例如:

block = do
|test| puts test
end

3.upto(8) block

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

在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") } 
它们基本上是非常相似的方法,但有细微的差别


最后,可能还有更优雅的方式来实现我所概述的,很高兴听到有更好方式的人的声音。希望这有帮助。

非常感谢。对于链接更是如此。你能不能也提一下兰博达斯?出于历史目的。@Shingetsu,我添加并更新了lambda,以及一个稍微简化的proc方法版本too@Shingetsu:lambda不是历史性的。你应该经常使用它们而不是进程。它们的功能更加全面,并且是标准的。@Linuxios我所说的“历史”是指“以后会来看这篇文章的人”。我读了这一页,发现lambdas更有意义。@Shingetsu:噢!很抱歉。我们有时都会误解。