如何存储Ruby代码块

28

我希望能够将一个"代码块"存储在变量中以便重用,类似于:

block = do
|test| puts test
end

3.upto(8) block

有人能向我展示我到底做错了什么吗?(或者这根本不可能)

1个回答

40

在 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") } 

这两种方法基本上非常相似,只是有一些细微的差别。

最后,可能有更加优雅的方式来实现我所描述的内容,希望有更好方法的人来分享。希望这可以帮助到你。


2
非常感谢。对于链接更加感激不尽。您能否友好地提及一下 lambda 表达式呢?出于历史记录的目的。 - user1241335
@Shingetsu,我使用lambda添加和更新了代码,并提供了稍微简化的proc方法。 - stephenmurdoch
3
@Shingetsu说:“Lambda表达式并不具有历史性。你几乎总是应该使用它们而不是Procs。它们的功能更加全面,也是标准。” - Linuxios
@Linuxios,历史意义上的“人们将来会看到这篇文章的人”。我阅读了页面并发现Lambda更有意义。 - user1241335
@Shingetsu:哦!对不起。我们有时都会误解。 - Linuxios

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接