On Mon Nov 22 16:06:07 2010, masak wrote: > <masak> rakudo: sub foo($a, %h?) { bar($a, %h) }; sub bar($a, %h?) { > say "alive!" }; foo(42) > <p6eval> rakudo : OUTPUT«Method 'HOW' not found for invocant of class > 'Hash' in 'bar' at line 1 [...] > <masak> rakudo: sub foo($a, %h?) { say %h.WHAT }; foo(42) > <p6eval> rakudo : OUTPUT«Method 'WHAT' not found for invocant of class > 'Hash' in 'foo' at line 22:/tmp/qK5WsYzzEI in main program body at > line 22:/tmp/qK5WsYzzEI» > * masak submits rakudobug > <colomon> masak++ > <masak> bug brought to you courtesy of a November being brought back > from the Mostly Dead. > > Further experimenting reveals that the %h coming in through &foo > claims to be a Hash, but it has no methods at all, so you can't do > anything with it, not even pass it to &bar.
<masak> ah, here's a workaround: <masak> rakudo: sub foo($a, %h = {}) { bar($a, %h) }; sub bar($a, %h?) { say "alive!" }; foo(42) <p6eval> rakudo : OUTPUT«alive!» <masak> of course. * masak adds that to the ticket