3

コンパイルしたいコードは次のとおりです。

macro defineSomething(amount:expr):stmt=
   var amountInt = intVal(amount).int
   # Boring staff

defineSomething(42);

それは完全に機能します。マクロ内に必要なものがすべて揃っているので、自分の方法でスタッフを操作できます。

しかし、それから、マジックナンバーをいくつかの const 設定から削除する方が良いと思います:

const MAGIC_AMOUNT:int = 42

# Whole lot of strings
defineSomething(MAGIC_AMOUNT)

このコードは失敗します。文字どおりマジックナンバーMAGIC_AMOUNTと違って整数値ではないからです。42

では、nimのマクロ内で変数値を取得するにはどうすればよいですか?

4

2 に答える 2

2

式は型指定されていません。本当に整数を取得したいので、入力するパラメーターを指定すると、これがコンパイルされます。

import macros

macro defineSomething(amount: typed):stmt=
  echo getType(amount)
  var amountInt = intVal(amount).int
  echo "Hey ", amount_int

const MAGIC_AMOUNT = 42
defineSomething(43)
defineSomething(MAGIC_AMOUNT)

または、マクロ内のパラメーターの種類intに他のタイプも渡されたくない場合を除き、パラメーターのタイプとして法線を使用します。case

于 2015-07-07T20:42:37.297 に答える