如何在Nim模板中获取expr的字符串表示形式

时间:2015-07-22 13:46:00

标签: generic-programming nim

是否有可能在name内获取表达式(或标识符)的字符串表示?例如,拥有下一个代码:

vector<vector<double>> some_values{{5,0,8},{3,1,9}};

auto joined = some_values | ranges::view::join;
auto p = std::minmax_element(joined.begin(), joined.end());

是否可以在模板中获取p.first表达式的字符串表示形式?

1 个答案:

答案 0 :(得分:5)

您可以使用系统模块中的astToStr魔法来执行此操作:

template foo*(name: untyped) =
  var `name`* {.inject.}: string = ""
  # Want to print 'name' here, not its value like with backticks
  echo "the variable name is ", name.astToStr

foo test

输出将是:

the variable name is test

不鼓励使用最新版本的编译器来使用immediate pragma。有关详细信息,请参阅以下答案: typed vs untyped vs expr vs stmt in templates and macros