Delegate operators through a trait so the delegating class supports $ and ?.
← Sealed Types and Traits · Ref: Q1133
Trait delegation with 'by' forwards methods AND operators:
Wrapper with trait of Printable by delegate delegate as Printable?
If the trait defines operators (via default operator or explicit), the delegating class forwards them to the delegate.
See Q1129 for basic delegation. See Q1130 for chained delegation.
Example
defines module qa.sealedtraits.traitoperatordelegation defines trait Printable describe() as pure <- rtn as String: "default" defines class RealPrinter with trait of Printable override describe() as pure <- rtn as String: "RealPrinter" default operator ? //Delegates all trait members including operators PrinterWrapper with trait of Printable by delegate delegate as Printable? default private PrinterWrapper() PrinterWrapper() -> printer as Printable require printer? delegate := printer default operator ? defines program TraitOperatorDelegationDemo() stdout <- Stdout() real <- RealPrinter() wrapper <- PrinterWrapper(real) //Delegated method call stdout.println(wrapper.describe()) //Operator ? works through delegation stdout.println(`Wrapper set?: ${wrapper?}`)
Common mistakes
E01010 — Use 'by delegate' to automatically forward all trait members including operators. No manual forwarding needed.
Incorrect:
Wrapper with trait of Printable delegate as Printable operator $ as pure <- rtn as String: $delegate
Correct:
Wrapper with trait of Printable by delegate delegate as Printable?
Other ways to ask this
- I need a wrapper class that delegates not just methods but also operators via a trait
- In Kotlin 'by' delegates interface methods. Show EK9 trait operator delegation
- Given a trait with operators, create a delegating class that forwards them
- Make a delegating wrapper support $ string and ? isSet through its delegate
Coming from another language?
Kotlin: class Wrapper(p: Printable): Printable by p — delegates methods and properties. EK9: 'with trait of X by field' — delegates methods and operators.
Keywords: delegation, trait, operator, by, forward, $, ?