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