为啥 Ruby 中的 `a = a` `nil`?

Posted

技术标签:

【中文标题】为啥 Ruby 中的 `a = a` `nil`?【英文标题】:Why is `a = a` `nil` in Ruby?为什么 Ruby 中的 `a = a` `nil`? 【发布时间】:2012-02-13 01:11:03 【问题描述】:

我看了这个video。如果未定义 a,为什么 a = a 会被评估为 nil

a = a # => nil
b = c = q = c # => nil

【问题讨论】:

【参考方案1】:

Ruby 解释器在看到分配给它时使用nil 初始化一个局部变量。它在执行赋值表达式之前或什至在赋值不可访问时初始化局部变量(如下例所示)。这意味着您的代码使用nil 初始化a,然后表达式a = nil 将计算为右侧值。

a = 1 if false
a.nil? # => true

第一个赋值表达式没有被执行,但是a被初始化为nil

您可以在 Ruby assignment documentation 中找到此行为的记录。

【讨论】:

以上是关于为啥 Ruby 中的 `a = a` `nil`?的主要内容,如果未能解决你的问题,请参考以下文章

为啥`return a or b`是Ruby中的空值表达式错误?

为啥在ruby中,[].all?i i==1 的结果为true?

为什么Ruby的默认参数值不能分配给nil参数?

ruby 将嵌套数组转换为哈希

为啥 Ruby on Rails 不使用 .includes() 加载我的关联对象?

在ruby && =运算符是片状?