如何在 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")
是否可以通过符号获取对 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")