(少なくともある種の) 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 式に制限があるようです。正確には何をそこに置くことができますか?