ruby - 了解 ruby​​ 代码(斐波那契)

标签 ruby

我遇到了一个 ruby​​ 方法,它是一个迭代斐波那契序列。(不是递归)代码中有一行我以前从未见过,而且我不太确定它在做什么。方法如下:

方法:

def practice(n)
  return 0 if n == 0
  num1 = 2
  num2 = 1
  n.times do
    num1, num2 = num2, (num1 + num2)
  end
  num1
end 

如果有人能够重复这一点并解释正在发生的事情,我将永远感激不已。但是,主要是我不理解这部分代码 -

n.times do
  num1, num2 = num2, (num1 + num2)
end

num1, num2 = num2 的作用/含义是什么??

最佳答案

代码行num1, num2 = num2, (num1 + num2) 一次分配两个变量。 num1 获取 num2 的旧值,而 num2 获取新值 (num1 + num2)

在一行代码上进行多个赋值允许您执行这两种操作,而无需使用临时变量。例如,这将不起作用:

num1 = num2
num2 = (num1 + num2)

因为 num1 在加法步骤之前已被新值覆盖,因此 num2 将被分配错误的值。一行版本相当于:

temp = (num1 + num2)
num1 = num2
num2 = temp

仅供引用,这称为 parallel assignment或者有时多重分配

关于ruby - 了解 ruby​​ 代码(斐波那契),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38934819/

相关文章:

sql - 如何将嵌套集中的所有记录呈现为真正的 html 树

ruby - 在 ruby 中压缩大字符串

ruby-on-rails - 将散列作为函数参数处理

ruby - 如何使用 Ruby 在 CSV 中每行创建多列

Ruby:比较之间有什么区别: "||"和 "or"

ruby-on-rails - 未初始化的常量 ApplicationRecord

ruby - 是否有任何 REST API 可以在 rails 中的 quickblox 中获取在线用户

ruby-on-rails - 如何使用 ApplicationController 的嵌套属性方法?

ruby-on-rails - Ruby on Rails 解决方案的 LAMP 等效术语

ruby - 如何使用 Ruby Rest-Client 处理异常