【问题标题】:Variable scope within a block in rubyruby 块内的变量范围
【发布时间】:2022-01-17 22:37:32
【问题描述】:

我在 ruby​​ 的一个块中与变量范围作斗争。我了解到while、until 或for 之后的do..end 循环不是块,因为while、until 或for 不是方法调用。所以他们不会创建自己的内部范围。但是这个例子让我很困惑

loop do
  b = 2
  p b # => 2
  break
end
p b

在此示例中,b 使用 do..end 内的数字 2 进行初始化。调用 puts 方法时将变量 b 作为参数传递给它,并通过 NameError 传递给它。说b 是未定义的局部变量,但正如我之前所说 while、until 或 for 循环之后的 do..end 不会创建自己的内部范围

【问题讨论】:

  • 正如您提到的while、until 和for 是keywords 并且不创建局部变量范围。另一方面,loop 是一个实现为 Kernel#loop 的方法调用,它与 ruby​​ 中的其他块调用遵循相同的词法块作用域。

标签: ruby scope local-variables


【解决方案1】:

但正如我之前所说 while、until 或 for 循环之后的 do..end 不会创建自己的内部范围

没错。但是您的代码中没有while、until 或for 循环。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-27
    • 2013-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多