【问题标题】:Why x = x does not raise an error even if x is undefined [duplicate]为什么即使 x 未定义 x = x 也不会引发错误 [重复]
【发布时间】:2012-10-19 01:18:12
【问题描述】:

可能重复:
Why is `a = a` `nil` in Ruby?

我确定这种行为是有原因的,我只是好奇它是什么。

y = x # NameError: undefined local variable or method 'x'
x = x # => nil

【问题讨论】:

标签: ruby


【解决方案1】:

这是由 Ruby 中变量的初始化方式引起的,这对于该语言来说是相当独特的。基本上,Ruby 初始化(创建)一个变量,如果它可能被分配一个值。考虑这个例子:

if false
  x = "hello"
end

x 绝对不会在这里分配"hello" 字符串。但是,它仍然会使用 nil 进行初始化,因为从静态程序分析来看,它可能已被分配。

你的例子是类似的。因为您为x 分配了一些东西,所以它会在执行语句之前用nil 进行初始化。因此,在执行过程中,x 实际上是nil

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-29
    • 2014-05-09
    • 2019-11-11
    • 2017-02-15
    • 2013-02-05
    • 2020-04-12
    • 2013-08-29
    • 1970-01-01
    相关资源
    最近更新 更多