Roles are collections of methods and attributes that can be mixed into classes. A role provides an alternate form of code reuse from inheritance. Roles are typically mixed in using "does".

role Seller {
  method sell { say self.^name ~ ' is selling' }
}

role Buyer {
  method buy { say self.^name ~ ' is buying' }
}

class Consumer does Buyer {}
class Producer does Seller {}
class Company does Buyer does Seller {}

my $producer = Producer.new;
my $consumer = Consumer.new;
my $company = Company.new;

$producer.sell;
$consumer.buy;
$company.sell;
$company.buy;


Output:

Producer is selling
Consumer is buying
Company is selling
Company is buying

   Page Updates
ORM::ActiveRecord
Template::HAML
BDD::Behave
Console::Blackjack
   Recent Articles
Console Blackjack in Perl
Selenium::WebDriver::Error::UnknownError
Game of Life in C++ using the SDL2
PigPen (dots and boxes) in C++ using the SDL2
GUI TicTacToe in C++ using the SDL2
   Tags
active-record (1) android (1) bash (2) bashrc (1) battleship (1) bdd (0) blackjack (11) book (1) books (1) build (1) c (2) c++ (2) capybara (1) clang (1) clang++ (1) console (4) cpp (2) crm (1) crystal (1) data (1) debian (5) diff (1) elixir (1) fedora (1) firewall (1) freebsd (1) g++ (1) game (4) games (1) gcc (1) gem (1) git (3) github (1) gmail (1) go-lang (3) google-chrome (1) haml (0) infix (1) kernel (3) latin1 (1) life (1) linux (4) lottery (1) meta (1) microsoft (1) moarvm (1) model (1) module (1) mongodb (1) mp3s (1) mutt (1) nautical (1) nqp (1) object (1) operator (1) orm (1) pairing (1) pair-programming (1) patch (1) perl (1) pigpen (1) postgresql (2) powerball (1) programming (1) psql (1) python (2) python3 (1) raku (10) raspberrypi (1) reactjs (2) readline (1) reversi (1) ruby (1) sdl2 (4) sed (1) selenium (1) selinux (1) split (1) ssh (1) stack (1) template (0) testing (2) tictactoe (1) trace (1) typescript (2) ubuntu (2) utf8 (1) virus (1) war (1) xvfb (1) zef (1)
   Twitter

Copyright © 2005 - 2020

GregDonald.com · Contact

All Rights Reserved