| ------------------------------------------------------------------------------- |
| -- Copyright (c) 2006-2013 Fabien Fleutot and others. |
| -- |
| -- All rights reserved. |
| -- |
| -- This program and the accompanying materials are made available |
| -- under the terms of the Eclipse Public License v1.0 which |
| -- accompanies this distribution, and is available at |
| -- http://www.eclipse.org/legal/epl-v10.html |
| -- |
| -- This program and the accompanying materials are also made available |
| -- under the terms of the MIT public license which accompanies this |
| -- distribution, and is available at http://www.lua.org/license.html |
| -- |
| -- Contributors: |
| -- Fabien Fleutot - API and implementation |
| -- |
| ------------------------------------------------------------------------------- |
| |
| -{ extension 'xmatch' } |
| |
| WIDTH=60 |
| function p(msg) io.write(msg..' ':rep(WIDTH-#msg)) end |
| |
| ---------------------------------------------------------------------- |
| p "match as an expression" |
| print(match 1 with 1 -> 'ok' | 2 -> 'KO') |
| |
| ---------------------------------------------------------------------- |
| p "global match function" |
| match function g |
| | x if x<10 -> return 'o' |
| | _ -> return 'k' |
| end |
| print(g(1)..g(11)) |
| |
| ---------------------------------------------------------------------- |
| p "global match function, multi-args" |
| match function cmp |
| | x, y if x<y -> return 'increasing' |
| | _, _ -> return 'decreasing' |
| end |
| |
| if cmp(1,2)=='increasing' and cmp(2,1)=='decreasing' then |
| print "ok" else print "KO" |
| end |
| |
| ---------------------------------------------------------------------- |
| p "local match function" |
| do |
| local match function x |
| | 1 -> print 'ok' |
| end |
| x(1) |
| end |
| assert(not x) |
| |
| ---------------------------------------------------------------------- |
| p "global bind assignment" |
| bind {a, b} = {'o', 'k'} |
| print(a..b) |
| |
| ---------------------------------------------------------------------- |
| p "local bind assignment" |
| c, d = 'k', 'o' |
| do |
| local bind {c, {d}} = {'o', {'k'}} |
| print(c..d) |
| end |
| |
| ---------------------------------------------------------------------- |
| p "local bind assignment scope" |
| print(d..c) |