在 Ruby 中评估方法参数的顺序是什么?

Mik*_*e S 3 ruby

我尝试回答这个问题之前,我一直假设参数是按照我们输入它们的方式从左到右计算的。例如我们有一些方法:

def foo(a,b,c)
Run Code Online (Sandbox Code Playgroud)

有没有办法随着时间的推移监视 Ruby 程序中的变量定义和值?如果调用foo 0,1,2如何证明变量按以下顺序赋值?

时间 0: a = 0

时间一: b = 1

时间2: c = 2

我意识到我的例子是微不足道的,因为我有相同类型的参数,a, b, c但是当你引入默认参数、关键字参数和数组参数时,它可能会变得混乱。如果没有人知道答案,我将不胜感激有关如何确定答案的建议。

基本上相当于this的 Ruby 。

Jör*_*tag 5

ISO Ruby 语言规范说参数按照它们在程序文本中出现的顺序绑定到参数。但是,规范对于这是否也意味着它们按该顺序进行评估是模糊的。

RubySpec,AFAICS不说,在所有关于方法参数的计算顺序什么。

因此,答案似乎是:方法参数没有保证的评估顺序。不同的实现之间可能不同,同一实现的不同版本之间可能不同,同一实现的同一版本的两次运行之间可能不同,甚至对同一方法的两次调用之间也可能不同。它们可以并行评估。

你只是不知道。