role Callable { ... }

Role for objects which support calling them. It's used in Block, Routine, Sub, Method, Submethod and Macro types.

Callables can be stored in &-sigiled containers, the default type constraint of such a container is Callable.

my &a = {;}; # Empty block needs a semicolon
my &b = -> {};
my &c = sub () {};
sub foo() {};
my &d = &foo;

Methodsยง

method CALL-MEยง

method CALL-ME(Callable:D $self: |arguments)

This method is required for the ( ) postcircumfix operator and the .( ) postcircumfix operator. It's what makes an object actually call-able and needs to be overloaded to let a given object act like a routine. If the object needs to be stored in an &-sigiled container, it has to implement Callable.

class A does Callable {
    submethod CALL-ME(|c){ 'called' }
}
my &a = A;
say a(); # OUTPUT: ยซcalledโคยป

Applying the Callable role is not a requirement to make an object callable; if a class simply wants to add subroutine-like semantics in a regular scalar container, the submethod CALL-ME can be used for that.

class A {
    has @.values;
    submethod CALL-ME(Int $x where 0 <= * < @!values.elems) {
        @!values[$x]
    }
}
my $a = A.new: values => [4,5,6,7];
say $a(2); # OUTPUT: ยซ6โคยป

method Captureยง

method Capture()

Throws X::Cannot::Capture.

Typegraphยง

Type relations for Callable
role Callable | Raku Documentationraku-type-graphCallableMuAnyAny->MuCodeCode->CallableCode->AnyForeignCodeForeignCode->CallableForeignCode->AnyBlockBlock->CodeWhateverCodeWhateverCode->CodeRoutineRoutine->BlockMethodMethod->RoutineSubmethodSubmethod->RoutineSubSub->RoutineMacroMacro->RoutineRegexRegex->Method - docs.raku.org role Callable | Raku Documentationraku-type-graphCallableMuAnyAny->MuCodeCode->CallableCode->AnyForeignCodeForeignCode->CallableForeignCode->AnyBlockBlock->CodeWhateverCodeWhateverCode->CodeRoutineRoutine->BlockMethodMethod->RoutineSubmethodSubmethod->RoutineSubSub->RoutineMacroMacro->RoutineRegexRegex->Method - docs.raku.org Callable role Callable | Raku Documentationraku-type-graphCallableMuAnyAny->MuCodeCode->CallableCode->AnyForeignCodeForeignCode->CallableForeignCode->AnyBlockBlock->CodeWhateverCodeWhateverCode->CodeRoutineRoutine->BlockMethodMethod->RoutineSubmethodSubmethod->RoutineSubSub->RoutineMacroMacro->RoutineRegexRegex->Method - docs.raku.org Mu role Callable | Raku Documentationraku-type-graphCallableMuAnyAny->MuCodeCode->CallableCode->AnyForeignCodeForeignCode->CallableForeignCode->AnyBlockBlock->CodeWhateverCodeWhateverCode->CodeRoutineRoutine->BlockMethodMethod->RoutineSubmethodSubmethod->RoutineSubSub->RoutineMacroMacro->RoutineRegexRegex->Method - docs.raku.org Any role Callable | Raku Documentationraku-type-graphCallableMuAnyAny->MuCodeCode->CallableCode->AnyForeignCodeForeignCode->CallableForeignCode->AnyBlockBlock->CodeWhateverCodeWhateverCode->CodeRoutineRoutine->BlockMethodMethod->RoutineSubmethodSubmethod->RoutineSubSub->RoutineMacroMacro->RoutineRegexRegex->Method - docs.raku.org role Callable | Raku Documentationraku-type-graphCallableMuAnyAny->MuCodeCode->CallableCode->AnyForeignCodeForeignCode->CallableForeignCode->AnyBlockBlock->CodeWhateverCodeWhateverCode->CodeRoutineRoutine->BlockMethodMethod->RoutineSubmethodSubmethod->RoutineSubSub->RoutineMacroMacro->RoutineRegexRegex->Method - docs.raku.org Code role Callable | Raku Documentationraku-type-graphCallableMuAnyAny->MuCodeCode->CallableCode->AnyForeignCodeForeignCode->CallableForeignCode->AnyBlockBlock->CodeWhateverCodeWhateverCode->CodeRoutineRoutine->BlockMethodMethod->RoutineSubmethodSubmethod->RoutineSubSub->RoutineMacroMacro->RoutineRegexRegex->Method - docs.raku.org role Callable | Raku Documentationraku-type-graphCallableMuAnyAny->MuCodeCode->CallableCode->AnyForeignCodeForeignCode->CallableForeignCode->AnyBlockBlock->CodeWhateverCodeWhateverCode->CodeRoutineRoutine->BlockMethodMethod->RoutineSubmethodSubmethod->RoutineSubSub->RoutineMacroMacro->RoutineRegexRegex->Method - docs.raku.org role Callable | Raku Documentationraku-type-graphCallableMuAnyAny->MuCodeCode->CallableCode->AnyForeignCodeForeignCode->CallableForeignCode->AnyBlockBlock->CodeWhateverCodeWhateverCode->CodeRoutineRoutine->BlockMethodMethod->RoutineSubmethodSubmethod->RoutineSubSub->RoutineMacroMacro->RoutineRegexRegex->Method - docs.raku.org ForeignCode role Callable | Raku Documentationraku-type-graphCallableMuAnyAny->MuCodeCode->CallableCode->AnyForeignCodeForeignCode->CallableForeignCode->AnyBlockBlock->CodeWhateverCodeWhateverCode->CodeRoutineRoutine->BlockMethodMethod->RoutineSubmethodSubmethod->RoutineSubSub->RoutineMacroMacro->RoutineRegexRegex->Method - docs.raku.org role Callable | Raku Documentationraku-type-graphCallableMuAnyAny->MuCodeCode->CallableCode->AnyForeignCodeForeignCode->CallableForeignCode->AnyBlockBlock->CodeWhateverCodeWhateverCode->CodeRoutineRoutine->BlockMethodMethod->RoutineSubmethodSubmethod->RoutineSubSub->RoutineMacroMacro->RoutineRegexRegex->Method - docs.raku.org role Callable | Raku Documentationraku-type-graphCallableMuAnyAny->MuCodeCode->CallableCode->AnyForeignCodeForeignCode->CallableForeignCode->AnyBlockBlock->CodeWhateverCodeWhateverCode->CodeRoutineRoutine->BlockMethodMethod->RoutineSubmethodSubmethod->RoutineSubSub->RoutineMacroMacro->RoutineRegexRegex->Method - docs.raku.org Block role Callable | Raku Documentationraku-type-graphCallableMuAnyAny->MuCodeCode->CallableCode->AnyForeignCodeForeignCode->CallableForeignCode->AnyBlockBlock->CodeWhateverCodeWhateverCode->CodeRoutineRoutine->BlockMethodMethod->RoutineSubmethodSubmethod->RoutineSubSub->RoutineMacroMacro->RoutineRegexRegex->Method - docs.raku.org role Callable | Raku Documentationraku-type-graphCallableMuAnyAny->MuCodeCode->CallableCode->AnyForeignCodeForeignCode->CallableForeignCode->AnyBlockBlock->CodeWhateverCodeWhateverCode->CodeRoutineRoutine->BlockMethodMethod->RoutineSubmethodSubmethod->RoutineSubSub->RoutineMacroMacro->RoutineRegexRegex->Method - docs.raku.org WhateverCode role Callable | Raku Documentationraku-type-graphCallableMuAnyAny->MuCodeCode->CallableCode->AnyForeignCodeForeignCode->CallableForeignCode->AnyBlockBlock->CodeWhateverCodeWhateverCode->CodeRoutineRoutine->BlockMethodMethod->RoutineSubmethodSubmethod->RoutineSubSub->RoutineMacroMacro->RoutineRegexRegex->Method - docs.raku.org role Callable | Raku Documentationraku-type-graphCallableMuAnyAny->MuCodeCode->CallableCode->AnyForeignCodeForeignCode->CallableForeignCode->AnyBlockBlock->CodeWhateverCodeWhateverCode->CodeRoutineRoutine->BlockMethodMethod->RoutineSubmethodSubmethod->RoutineSubSub->RoutineMacroMacro->RoutineRegexRegex->Method - docs.raku.org Routine role Callable | Raku Documentationraku-type-graphCallableMuAnyAny->MuCodeCode->CallableCode->AnyForeignCodeForeignCode->CallableForeignCode->AnyBlockBlock->CodeWhateverCodeWhateverCode->CodeRoutineRoutine->BlockMethodMethod->RoutineSubmethodSubmethod->RoutineSubSub->RoutineMacroMacro->RoutineRegexRegex->Method - docs.raku.org role Callable | Raku Documentationraku-type-graphCallableMuAnyAny->MuCodeCode->CallableCode->AnyForeignCodeForeignCode->CallableForeignCode->AnyBlockBlock->CodeWhateverCodeWhateverCode->CodeRoutineRoutine->BlockMethodMethod->RoutineSubmethodSubmethod->RoutineSubSub->RoutineMacroMacro->RoutineRegexRegex->Method - docs.raku.org Method role Callable | Raku Documentationraku-type-graphCallableMuAnyAny->MuCodeCode->CallableCode->AnyForeignCodeForeignCode->CallableForeignCode->AnyBlockBlock->CodeWhateverCodeWhateverCode->CodeRoutineRoutine->BlockMethodMethod->RoutineSubmethodSubmethod->RoutineSubSub->RoutineMacroMacro->RoutineRegexRegex->Method - docs.raku.org role Callable | Raku Documentationraku-type-graphCallableMuAnyAny->MuCodeCode->CallableCode->AnyForeignCodeForeignCode->CallableForeignCode->AnyBlockBlock->CodeWhateverCodeWhateverCode->CodeRoutineRoutine->BlockMethodMethod->RoutineSubmethodSubmethod->RoutineSubSub->RoutineMacroMacro->RoutineRegexRegex->Method - docs.raku.org Submethod role Callable | Raku Documentationraku-type-graphCallableMuAnyAny->MuCodeCode->CallableCode->AnyForeignCodeForeignCode->CallableForeignCode->AnyBlockBlock->CodeWhateverCodeWhateverCode->CodeRoutineRoutine->BlockMethodMethod->RoutineSubmethodSubmethod->RoutineSubSub->RoutineMacroMacro->RoutineRegexRegex->Method - docs.raku.org role Callable | Raku Documentationraku-type-graphCallableMuAnyAny->MuCodeCode->CallableCode->AnyForeignCodeForeignCode->CallableForeignCode->AnyBlockBlock->CodeWhateverCodeWhateverCode->CodeRoutineRoutine->BlockMethodMethod->RoutineSubmethodSubmethod->RoutineSubSub->RoutineMacroMacro->RoutineRegexRegex->Method - docs.raku.org Sub role Callable | Raku Documentationraku-type-graphCallableMuAnyAny->MuCodeCode->CallableCode->AnyForeignCodeForeignCode->CallableForeignCode->AnyBlockBlock->CodeWhateverCodeWhateverCode->CodeRoutineRoutine->BlockMethodMethod->RoutineSubmethodSubmethod->RoutineSubSub->RoutineMacroMacro->RoutineRegexRegex->Method - docs.raku.org role Callable | Raku Documentationraku-type-graphCallableMuAnyAny->MuCodeCode->CallableCode->AnyForeignCodeForeignCode->CallableForeignCode->AnyBlockBlock->CodeWhateverCodeWhateverCode->CodeRoutineRoutine->BlockMethodMethod->RoutineSubmethodSubmethod->RoutineSubSub->RoutineMacroMacro->RoutineRegexRegex->Method - docs.raku.org Macro role Callable | Raku Documentationraku-type-graphCallableMuAnyAny->MuCodeCode->CallableCode->AnyForeignCodeForeignCode->CallableForeignCode->AnyBlockBlock->CodeWhateverCodeWhateverCode->CodeRoutineRoutine->BlockMethodMethod->RoutineSubmethodSubmethod->RoutineSubSub->RoutineMacroMacro->RoutineRegexRegex->Method - docs.raku.org role Callable | Raku Documentationraku-type-graphCallableMuAnyAny->MuCodeCode->CallableCode->AnyForeignCodeForeignCode->CallableForeignCode->AnyBlockBlock->CodeWhateverCodeWhateverCode->CodeRoutineRoutine->BlockMethodMethod->RoutineSubmethodSubmethod->RoutineSubSub->RoutineMacroMacro->RoutineRegexRegex->Method - docs.raku.org Regex role Callable | Raku Documentationraku-type-graphCallableMuAnyAny->MuCodeCode->CallableCode->AnyForeignCodeForeignCode->CallableForeignCode->AnyBlockBlock->CodeWhateverCodeWhateverCode->CodeRoutineRoutine->BlockMethodMethod->RoutineSubmethodSubmethod->RoutineSubSub->RoutineMacroMacro->RoutineRegexRegex->Method - docs.raku.org

Expand chart above