Prime#prime_division中的while语句如何工作?

时间:2014-01-15 07:13:40

标签: ruby

我正在使用ruby解决Project Euler上的问题。

我通过以下代码解决问题#3:

require 'prime'

division = Prime.prime_division(600851475143)
puts division.last.first

我决定查看Prime#prime_division,这是code

def prime_division(value, generator = Prime::Generator23.new)
  raise ZeroDivisionError if value == 0
  if value < 0
    value = -value
    pv = [[-1, 1]]
  else
    pv = []
  end
  for prime in generator
    count = 0
    while (value1, mod = value.divmod(prime)
           mod) == 0
      value = value1
      count += 1
    end
    if count != 0
      pv.push [prime, count]
    end
    break if value1 <= prime
  end
  if value > 1
    pv.push [value, 1]
  end
  return pv
end

while语句如何运作?

while (value1, mod = value.divmod(prime)
       mod) == 0
 ...
end

我尝试在没有换行符(value1, mod = value.divmod(prime) mod) == 0的情况下运行它但出错了。

换行代表什么?

1 个答案:

答案 0 :(得分:1)

括号可以包含多个语句。 (语句由换行符或;分隔)

以下是疑似BNFによるRubyの文法

的相关部分
COMPSTMT        : STMT (TERM EXPR)* [TERM]

TERM            : `;'
                | `\n'

PRIMARY         : `(' COMPSTMT `)'
                | ...

最后一个表达式的值成为(...)表达式的返回值。

(a = 1
 a + 1)
# => 2