0

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

1 に答える 1