Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Put a callback in an enum

An enum can also own a callback. Match a borrow when you want to leave the owner in place, or match the value to transfer its environment into an arm.

enum Job[F: Callable[[], i64]]:
    Run(F)
    Empty

def package[F: Callable[[], i64]](callback: F) -> Job[F]:
    Job[F].Run(callback)

def invoke[F: Callable[[], i64]](job: &Job[F]) -> i64:
    match &job:
        case Job.Run(callback):
            callback()
        case Job.Empty:
            0

def main() -> Result[(), IoError]:
    value = 42
    callback = def [value]() -> i64:
        value
    job = package(callback)
    print(invoke(&job))?
    Ok(())
42