MST

星途 面试题库

面试题:Ruby代码块中变量作用域常见陷阱示例分析

请分析以下Ruby代码中变量作用域的情况,并指出可能存在的陷阱。 ```ruby outer_variable = 10 3.times do |i| inner_variable = outer_variable + i puts inner_variable end puts inner_variable if defined?(inner_variable) ```
47.0万 热度难度
编程语言Ruby

知识考点

AI 面试

面试题答案

一键面试
  1. 变量作用域分析
    • outer_variable:定义在顶层作用域,在整个脚本中都可以访问(只要没有在其他作用域中重新定义遮蔽它)。
    • i:定义在3.times块内,其作用域仅限于该块。每次迭代i的值会改变,迭代结束后i在块外不可访问。
    • inner_variable:定义在3.times块内,其作用域也仅限于该块。虽然块在每次迭代时会重新执行并重新赋值inner_variable,但它的作用域不会超出块。
  2. 可能存在的陷阱
    • 试图在块外访问inner_variable会导致问题。尽管最后一行代码使用了defined?(inner_variable)来检查变量是否定义,但由于inner_variable的作用域仅限于块内,即使在块内多次赋值,在块外它实际上是未定义的。如果没有defined?检查直接puts inner_variable,会引发NameError异常,提示变量未定义。

在Ruby中,块有自己的局部作用域,块内定义的变量不会自动提升到外部作用域。