Stefan (>): > A methodical is an operator which syntactically behaves as a method but is > subject to scoping rules. Methodicals are defined using the ordinary method > keyword, qualified with my or our. (TODO: This seems the most natural syntax > to me, but it conflicts with existing usage. Which is more worth having on > it?) Methodicals do not need to be declared in classes, but they should > generally have declared receiver types. > > { > my method make-me-a-sandwich(Num:) { ... } > > 2.make-me-a-sandwich; # calls our method > > "ham".make-me-a-sandwich; # either an error, or method dispatch > } > > 2.make-ma-a-sandwich; # ordinary method dispatch
With just the addition of a single character, this already works in Perl 6: $ perl6 -e 'my &make-me-a-sandwich = method (Numeric $sandwichee:) { say "Hokay, $sandwichee" }; 2.&make-me-a-sandwich; "ham".&make-me-a-sandwich' Hokay, 2 Nominal type check failed for parameter '$sandwichee'; expected Numeric but got Str instead It is maybe a testament to Perl 6's "strange consistency" that no-one had anticipated this combination of syntax and semantics, and yet there it is, fallen out of more fundamental design choices. There was some surprise and amusement on #perl6 when we discovered this. In summary, the .& syntax: * can be used on lexical variables that don't pollute the global referencing environment, * does not compromise encapsulation, * does not require MONKEY_TYPING, * does not conflict with the spec'd usage of the 'method' declaration, * is implemented today, as it turns out. 's all good. // Carl