Jul 20, 2023

Roles with composition parameters

Roles are composable units of behavior. They are useful for factoring out functionality common to many classes from any part of your class hierarchy. See L for an introduction to L.

While combining roles affords you a great deal of flexibility, individual roles have very little in the way of configurability. Core Moose provides C<-alias> for renaming methods and C<-excludes> for ignoring methods. These options are primarily for resolving role conflicts. Depending on how much of a purist you are, these options are I for resolving role conflicts. See L for more about C<-alias> and C<-excludes>.

Because roles serve many different masters, they usually provide only the least common denominator of functionality. To empower roles further, more configurability than C<-alias> and C<-excludes> is required. Perhaps your role needs to know which method to call when it is done processing. Or what default value to use for its C attribute.

Parameterized roles offer a solution to these and other kinds of problems.

Checkout these related ports:
  • Zziplib - Library to provide transparent read access to zipped files
  • Zydis - Fast and lightweight x86/x86-64 disassembler library
  • Zycore-c - Support library with platform independent types, macros, etc for Zydis
  • Zthread - Platform-independent object-oriented C++ threading library
  • Zookeeper - Coordination Service for Distributed Applications
  • Zls - Zig LSP implementation + Zig Language Server
  • Zfp - High throughput library for compressed floating-point arrays
  • Zeal - Offline documentation browser
  • Zapcc - C++ caching compiler based on clang
  • Zanata-platform - Web-based translation platform
  • Zanata-cli - Zanata Java command line client
  • Z88dk - Complete Z80/Z180 development kit
  • Z80ex - ZiLOG Z80 CPU emulator library
  • Z80asm - Assembler for the Z80 microprocessor
  • Z80-asm - Z80 assembly code assembler and disassembler