2

これは奇妙に思えるかもしれませんし、おそらく不可能かもしれませんが、渡された式を評価して実行するマクロを作成する方法があるかどうか疑問に思っていましたimport.

文字列リテラルが式の場合、簡単に機能させることができます。

import macros
macro createImport(ex: expr): stmt =
  result = newNimNode(nnkImportStmt)
  result.add(ex)

createImport("strutils")

let a = ["foo", "bar", "baz"]
echo a.join("---") # using `join()` from the `strutils` module

しかし、変数が渡された場合、これはもちろん失敗します。

var s = "strutils"
createImport(s)

(インポートは、モジュールを実行する文字列パスである可能性があることに注意してください。)

ex: exprマクロに多くの調整を試み、ドキュメントとソースを精査しましたが、 の実際の値を で使用できるようにする方法が見つかりませんimport

渡された文字列を明らかにする呼び出しを作成するマクロを取得できますがecho、インポートでそれを使用しようとすると、変数名自体が使用されてしまいます。

マクロ自体が評価されるときに値が利用できないように見えるので、それが原因だと思います。これを行うことは可能ですか?

4

1 に答える 1

2

なぜそのようなヘルパー マクロが必要なのか、それが良いアイデアなのかどうかはよくわかりませんが、必要なものを実現する最も簡単な方法は次のとおりです。

template my_import(x: static[string]) = import x

const x = "strutils"
my_import x
于 2015-03-19T17:54:12.467 に答える