このモジュールは Nim のマクロシステムをベースとした素晴らしいシンタックスシュガーの実装です。
マクロ
macro `=>`(p, b: untyped): untyped
-
無名プロシージャのシンタックスシュガーです。
proc passTwoAndTwo(f: (int, int) -> int): int = f(2, 2) passTwoAndTwo((x, y) => x + y) # 4
ソース 編集 macro `->`(p, b: untyped): untyped
-
プロシージャ型のシンタックスシュガーです。
proc pass2(f: (float, float) -> float): float = f(2, 2) # は下記と同じです。 proc pass2(f: proc (x, y: float): float): float = f(2, 2)
ソース 編集 macro `[]`(lc: ListComprehension; comp, typ: untyped): untyped {...}{.deprecated.}
-
comp は、 x | (x <- 1..10, x mod 2 == 0) などの解読対象となるリストです。typ はシーケンスの処理結果へ格納する型です。
echo lc[x | (x <- 1..10, x mod 2 == 0), int] const n = 20 echo lc[(x,y,z) | (x <- 1..n, y <- x..n, z <- y..n, x*x + y*y == z*z), tuple[a,b,c: int]]
version 0.19.9 以降で廃止予定
ソース 編集
リストを解読して、シーケンスを返します。
macro dump(x: typed): untyped
-
式の内容をダンプして、デバッグで使えるようにします。式の入力後、ソースコードに出現する式の値と併せて式のツリー構造をテキスト形式で出力します。
用例:
let x = 10 y = 20 dump(x + y)
x + y = 30 を出力します。
ソース 編集 macro distinctBase(T: typedesc): untyped
-
type T = distinct A を反転します。これは再帰的処理を行います。
用例:
type T = distinct int doAssert distinctBase(T) is int doAssert: not compiles(distinctBase(int)) type T2 = distinct T doAssert distinctBase(T2) is int
ソース 編集