🙄
[Bug #20478] 循環してデフォルト引数が参照される際のシンタックスラー関するチケット
[Bug #20478] Circular parameter syntax error rules
- 以下のような『デフォルト引数のブロック内でその仮引数を参照する』ケースはシンタックスエラーになる
def foo(bar = -> { bar }) end # no lambda parameters
def foo(bar = ->() { bar }) end # no lambda parameters
def foo(bar = baz { bar }) end # no block parameters
def foo(bar = baz { _1 + bar }) end # parameters, but no pipes
def foo(bar = baz { it + bar }) end # parameters, but no pipes
- しかし、以下のようなケースだとシンタックスエラーにならないというバグ報告
def foo(bar = ->(baz) { bar }) end # lambda parameters
def foo(bar = baz { || bar }) end # no block parameters but empty pipes
def foo(bar = baz { |qux| bar }) end # block parameters
- 2つ目のコードだけ見ると
||
の有無でエラーになったりならなかったりしますねー - ちなみに挙動自体は循環して参照する形になる
def foo(bar = proc { || bar })
pp bar
# => #<Proc:0x00007528b612eae0 /tmp/v8mZNpq/14:1>
# これは自身を返す
pp bar.call
# => #<Proc:0x00007528b612eae0 /tmp/v8mZNpq/14:1>
end
foo
Discussion