It looks like you have spaces in the token { * } can you try it without, using this {*} instead?
On Mon, Jun 29, 2020, 1:29 PM Richard Hainsworth <rnhainswo...@gmail.com> wrote: > I have several multi methods. > > All of them have the same first statement, then differ depending on the > signature. > > proto seems to be a way to factor out the common statement, and there is a > phrase in the Documentation that * can affect the dispatch, viz: > > "You can give the proto a function body, and place the {*} where you want > the dispatch to be done. This can be useful when you have a "hole" in your > routine that gives it different behavior depending on the arguments given:" > > The docs give and example proto, but unfortunately, not how this works > with other multi's. > > So I tried this: > > class NewClass { > has $.debug is rw = False; > has $.value is rw = 'Initial value'; > > proto method handle( |c ) { > note "value is $.value" if $.debug; > { * } } > multi method handle(Str $s) { > $.value = $s; > say 'in string' } > multi method handle(Positional @s) { > $.value = @s[0]; > say 'in positional' } > } > my NewClass $x .= new; > $x.handle('hello world');$x.handle(<hello world>);$x.debug = > True;$x.handle('hello world');$x.handle(<hello world>); > > #raku test.raku > #value is Initial value > #value is Initial value > > I am wondering how to use proto and {*} > >