Apakah mungkin untuk mendapatkan referensi ke proc dengan simbolnya untuk proc multi-pengiriman?

Saya perlu membuat beberapa kode secara otomatis berdasarkan tanda tangan fungsi, dan tidak bisa mendapatkan referensi ke fungsi tersebut.

run (sepertinya tidak menampilkan output di taman bermain online)

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")

Keluaran:

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

Ini memiliki referensi ke diri dalam kasus pertama, tetapi tidak dalam kasus lain. Bagaimana cara mendapatkan referensi ke diri sendiri dalam kasus kedua? Saya perlu tahu tanda tangannya di dalam makro, argumen, dan tipe pengembalian.

0
Alex Craft 23 April 2021, 13:35

1 menjawab

Jawaban Terbaik

Jika Anda ingin bekerja dengan tanda tangan proc maka restrukturisasi kode Anda seperti:

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")
1
Jakub Dóka 23 April 2021, 11:22