objan object
assoca sequence of object/quotation pairs, with an optional quotation at the end


Word description
Compares obj against the first element of every pair, evaluating the first element if it is a callable. If a pair matches, obj is removed from the stack and the second element of that pair (which must be a quotation ) is call ed.

If there is no case matching obj, the default case is taken. If the last element of assoc is a quotation, the quotation is called with obj on the stack. Otherwise, a no-case error is raised.

The following two phrases are equivalent:
{ { X [ Y ] } { Z [ T ] } } case

dup X = [ drop Y ] [ dup Z = [ drop T ] [ no-case ] if ] if

no-case if the input matched none of the options and there was no trailing quotation.

USING: combinators io kernel ; IN: scratchpad SYMBOLS: yes no maybe ; maybe { { yes [ ] } ! Do nothing { no [ "No way!" throw ] } { maybe [ "Make up your mind!" print ] } [ drop "Invalid input; try again." print ] } case
Make up your mind!