Skip to content

Proposal: Switch lambdas #4

@vihanb

Description

@vihanb

This proposal details the workings of the planned switch (optionally *) statement.

Overview

The switch lambda is a block statement which functions both as a literal and a conditional block. In it's literal form it owns its own class rather than a TC link.

switch foo {
    case 1, 2: print "Foo is one or two"
    case 3, 4: print "Foo is three or four"
    else: print "Foo is something else"
}

Definition

The syntax is either switch or switch * where switch * specifies a switch literal. There may be any amount of whitespace between switch and *, if * exists. Following is the expression to be evaluated if the switch matches. This is followed by a block surrounded with braces {} of newline-seperated statements, which are the conditionals. Conditionals either begin with case or else, if case, then the beginning description is optional. Following is an expression which returns the value to be matched against, commands in these expressions serve as a logical OR during matching. These are followed by a : representing a single statement may follow. Or curly braces {} which allows for a multi-line code block

Formal Grammar

EBNF

@         = "switch" , [ "*" ] , expression , "{" , @case

@case     = [ ["case"] | "default" ] , @caselist , @block , @case
          | "}"

@caselist = expression , { "," , expression }

@block    = "{" code block "}"
          | ":" statement

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions