On Mon Nov 09 22:21:58 2015, larry wrote:
> 21:25 < TimToady> m: say Iterable === Any
> 21:25 <+camelia> rakudo-moar 2ad739: OUTPUT«Method 'iterator' must be
> implemented by Iterable because it is required by a role␤  in any
>                  compose_method_table at gen/moar/m-Metamodel.nqp:2661␤  in
> any apply at gen/moar/m-Metamodel.nqp:2671␤  in any compose at
>                  gen/moar/m-Metamodel.nqp:2807␤  in…»
> 21:49 < TimToady> m: sub foo(Iterable $s) {...}; say &foo.signature
> 21:49 <+camelia> rakudo-moar 2ad739: OUTPUT«Method 'iterator' must be
> implemented by Iterable because it is required by a role␤  in any
>                  compose_method_table at gen/moar/m-Metamodel.nqp:2661␤  in
> any apply at gen/moar/m-Metamodel.nqp:2671␤  in any compose at
>                  gen/moar/m-Metamodel.nqp:2807␤  in…»
> 21:50 < TimToady> that tries to call Iterable.WHICH, and that forces role
> punning, which doesn't work here
> 21:50 < TimToady> m: say Iterable.foo
> 21:50 <+camelia> rakudo-moar 2ad739: OUTPUT«Method 'iterator' must be
> implemented by Iterable because it is required by a role␤  in any
>                  compose_method_table at gen/moar/m-Metamodel.nqp:2661␤  in
> any apply at gen/moar/m-Metamodel.nqp:2671␤  in any compose at
>                  gen/moar/m-Metamodel.nqp:2807␤  in…»
> 21:50 < TimToady> doesn't matter which method you call on it

Well, trying to pun the role is the correct behavior on method calls on it, in 
general. We maintained a rather short list of methods that did not trigger 
punning; I've just expanded it quite a bit to include things people are likely 
to not want it to pun on, including .WHICH. The behavior for calling .foo is 
correct: it should try to pun and fail due to the missing method.

Tests in S14-roles/stubs.t.

Reply via email to