> On 15 Mar 2024, at 03:57, Mark Devine <m...@markdevine.com> wrote: > > Rakoons, > I keep running into a space with Raku where it would be nice to have some > magic to reduce boilerplate. I often make roles & classes with interface > options that flow from a consuming script’s MAIN arguments, then the first > bit of code at the top the MAIN block, then into instantiation. If a person > makes nice utility libraries with lots of options for the user & employs them > a lot, the time consumed typing out the boilerplate adds up & bloats the > code. Is there any way to shorten this pattern? I was thinking about a > ‘switchable’ trait for attributes (with the naivety of a schoolboy). > my class Output { > has $.csv is switchable; > has $.html is switchable; > . > . > . > has $.xml is switchable; > } > my class Timer { > has $.count is switchable; > has $.expire is switchable; > has $.interval is switchable; > } > sub MAIN ( > Output.switchables, #= switchables from Class 'Output' > Timer.switchables, #= switchables from Class 'Timer' > ) { > my Timer $t .= new: :$expire, :$interval, :$count; # variables > magically appear in scope > my Output $o .= new: :$csv, :$html, … , :$xml; # variables > magically appear in scope > } > I estimate 10-50 lines of boilerplate could be removed from most of my Raku > scripts with something like that. Unfortunately, I don’t possess any dark > magic for such things or I’d put forward an attempt.
An interesting idea! Unfortunately I don't see this happening in the legacy grammar. And it may still be pretty hard to do in RakuAST. If you'd want to have a solution now, I'd look at *generating* the boilerplate code where appropriate. This approach is used in the core in several locations, most notably recently in the localization modules. Liz