链接语句和逗号

时间:2016-07-27 14:19:02

标签: ruby

这是一个非常简单的问题,我没有找到一个好的解释。我知道它可能用分号链接语句,但我发现一些代码使用逗号。例如:

def gcd(a, b)  
  a, b = b, a%b  until b.zero?  
  a  
end 

此方法计算两个数字之间的最大公共除数。我理解这个计算背后的逻辑,但有人可以解释一下这个sintax是如何发生的?

2 个答案:

答案 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子句触发,则返回错误,否则执行计算的默认操作。

在您的情况下,保护条件是循环而不是单一条件。