option.rs 685 字节
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
// lib/option.rs

tag t[T] {
    none;
    some(T);
}

type operator[T, U] = fn(&T) -> U;

fn get[T](&t[T] opt) -> T {
    alt (opt) {
        case (some[T](?x)) {
            ret x;
        }
        case (none[T]) {
            fail;
        }
    }
}

fn map[T, U](&operator[T, U] f, &t[T] opt) -> t[U] {
    alt (opt) {
        case (some[T](?x)) {
            ret some[U](f(x));
        }
        case (none[T]) {
            ret none[U];
        }
    }
}

// Local Variables:
// mode: rust;
// fill-column: 78;
// indent-tabs-mode: nil
// c-basic-offset: 4
// buffer-file-coding-system: utf-8-unix
// compile-command: "make -k -C .. 2>&1 | sed -e 's/\\/x\\//x:\\//g'";
// End: