# sugar

- マニュアル
- 標準ライブラリ
- 索引

検索
分類:

このモジュールは Nim のマクロシステムをベースとした素晴らしいシンタックスシュガーの実装です。

# インポート

macros

# 変数

    lc: ListComprehension

  ソース 編集

# マクロ

    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

  ソース 編集

# テンプレート

    template `|`(lc: ListComprehension; comp: untyped): untyped {...}{.deprecated.}

  廃止予定
  ソース 編集