这是一个非常简单的问题,我没有找到一个好的解释。我知道它可能用分号链接语句,但我发现一些代码使用逗号。例如:
def gcd(a, b)
a, b = b, a%b until b.zero?
a
end
此方法计算两个数字之间的最大公共除数。我理解这个计算背后的逻辑,但有人可以解释一下这个sintax是如何发生的?
答案 0 :(得分:4)
它实际上不是链接语句,而是并行分配。这意味着:将b
的值分配给a
,并将a%b
的值同时分配给b
, 。
因为这些值是相互依赖的,所以它不能简单地写成:
# WRONG
a = b
b = a%b
您需要一个临时变量:
# Correct, but more verbose and less readable
old_b = b
b = a%b
a = old_b
在解构数组时,相同的语法也很有用,例如:
my_array = [1,2,3]
a, b, c = my_array
答案 1 :(得分:0)
这是一个保护条款的例子。
基本上,guard子句是一个条件语句,它根据条件启用或阻止ruby代码的块或行。
大多数语言的范例如下:
fn mymethod do
if somecondition
return calculation
else
return error
end
end
Ruby允许您将上述内容重组为:
def mymethod
return error unless somecondition
calculation
end
即如果guard子句触发,则返回错误,否则执行计算的默认操作。
在您的情况下,保护条件是循环而不是单一条件。