Ruby 中多个进程的执行顺序



我正在尝试一个愚蠢的例子来理解发送到一个方法的多个过程。然而,让我惊讶的一件事是执行顺序。我查看了Proc文档,但没有真正找到解释(可能是我看得不够仔细)。

下面是一个示例:

def my_block(a, b)
    a.call b.call
end
a = Proc.new { puts "hello" }
b = Proc.new { puts " world" }
my_block a, b

输出:

 world
hello

似乎当一行上有多个执行时,proc 执行从左到右执行。有人可以详细解释这种行为吗?

这是因为

a.call b.call

真的是:

a.call(b.call())

因此,b.call()首先像在任何编程语言中一样扩展(并运行),其结果作为参数传递给a

你会希望这会给出一个错误,但在 Ruby 中,块的额外参数不会导致错误(虽然这是一个方法的错误)......

您可以使用分号显式告诉 ruby 开始一个新表达式:

a.call; b.call

。但我会说这是非常不合时宜和"非红宝石"......

这仅仅是因为您将它们都放在同一行上,因此 b.call 被调用为 a.call 的参数。为此,您可以根据需要正常工作;

def my_block(a, b)
  a.call
  b.call
end

相关内容

  • 没有找到相关文章

最新更新