(至少某种)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 表达式有一些限制。究竟可以放什么?