如何在 multi-dispatch proc 中获取对 proc self 的引用?

How to get reference to proc self inside multi-dispatch proc?

是否可以通过符号获取对 proc 的引用以用于 multi-dispatch proc?

我需要根据函数签名自动生成一些代码,但无法获取函数的引用。

run(在线游乐场似乎没有显示输出)

import macros

macro generate_some_code*(fn: typed): typed =
  echo fn.tree_repr

proc multiply*(a: float, b: float): float = generate_some_code(multiply)

proc multiply*(a: string, b: string): string = generate_some_code(multiply)

discard multiply(1.0, 1.0)
discard multiply("A", "x")

输出:

Sym "multiply"
ClosedSymChoice
  Sym "multiply"
  Sym "multiply"

在第一种情况下它指的是自己,而在另一种情况下则没有。第二种情况如何获取对self的引用?

如果您想使用 proc 的签名,请像这样重构您的代码:

import macros

macro generate_some_code*(fn: typed): typed =
  echo fn.tree_repr

generate_some_code:
  proc multiply*(a: float, b: float): float = discard

generate_some_code:
  proc multiply*(a: string, b: string): string = discard

# assuming that generate_some_code will modify body and return it, so it is defined
discard multiply(1.0, 1.0)
discard multiply("A", "x")