相关疑难解决方法(0)

与错误的`if`块内的赋值操作混淆

我正在玩if积木中的任务操作,并发现了以下结果,这让我感到惊讶:

C:\>irb --simple-prompt
if false
x = 10
end
#=> nil
p x
nil
x.object_id
#=> 4
#=> nil
p y
NameError: undefined local variable or method `y' for main:Object
        from (irb):5
        from C:/Ruby193/bin/irb:12:in `<main>'
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,您可以看到x已创建局部变量,即使它仅被分配给falsy if块.我想看到的内容xp x这迫使我相信,分配却没有这样做,而是x变量存在.x.object_id也证明了这种情况.

现在我的问题是如何x创建局部变量,即使if块入口点是故意关闭的?

我期望输出p x类似于输出p y.但相反,我得到了一个惊人的答案p x.

有人可以向我解释这个概念是如何运作的吗?

编辑

不,这是另一个测试.仅local变量不是这种情况.同样的事情instanceclass变量也发生了.见下文:

class Foo
  def show
    @X …
Run Code Online (Sandbox Code Playgroud)

ruby if-statement nameerror

3
推荐指数
1
解决办法
314
查看次数

标签 统计

if-statement ×1

nameerror ×1

ruby ×1