【发布时间】:2014-12-27 04:50:51
【问题描述】:
(至少某种)Ruby 代码在方法的默认值规范中被接受和评估。在下面,评估"foo" * 3:
def bar baz = "foo" * 3; baz end
bar # => "foofoofoo"
def bar baz: "foo" * 3; baz end
bar # => "foofoofoo"
但是,当我尝试在默认值描述中的某个范围内评估局部变量/方法时,该局部变量/方法是在词法范围下评估的:
MAIN = TOPLEVEL_BINDING.eval('self')
foo = 3
def bar baz = MAIN.instance_eval{foo}; end
bar # => undefined local variable or method `foo' for main:Object
def bar baz: MAIN.instance_eval{foo}; end
bar # => undefined local variable or method `foo' for main:Object
- 为什么上面的
foo不在MAIN范围内评估,而是在词法范围内评估? - 这似乎对在默认值描述中可以评估的 Ruby 表达式有一些限制。究竟可以放什么?
【问题讨论】:
标签: ruby local-variables lexical-scope