2
, 나는 종종 같은 표현을 사용Nim에서 변수 (이름)와 해당 값을 디버깅하는 방법은 무엇입니까? 신속하고 더러운 디버깅하는 동안
내가 변수 이름을 반복하지 않도록하는 님의 매크로 시스템을 활용할 수있는 방법echo "variable1: ", variable1, " variable2: ", variable2
?
, 나는 종종 같은 표현을 사용Nim에서 변수 (이름)와 해당 값을 디버깅하는 방법은 무엇입니까? 신속하고 더러운 디버깅하는 동안
내가 변수 이름을 반복하지 않도록하는 님의 매크로 시스템을 활용할 수있는 방법echo "variable1: ", variable1, " variable2: ", variable2
?
인수를 반복하는 varargs 매크로를 사용하여 노드의 문자열 리터럴과 해당 값을 모두 인쇄하는 AST를 생성 할 수 있습니다. 이런 식으로 뭔가 :
import macros
macro debug*(n: varargs[typed]): untyped =
result = newNimNode(nnkStmtList, n)
for i in 0..n.len-1:
if n[i].kind == nnkStrLit:
# pure string literals are written directly
result.add(newCall("write", newIdentNode("stdout"), n[i]))
else:
# other expressions are written in <expression>: <value> syntax
result.add(newCall("write", newIdentNode("stdout"), toStrLit(n[i])))
result.add(newCall("write", newIdentNode("stdout"), newStrLitNode(": ")))
result.add(newCall("write", newIdentNode("stdout"), n[i]))
if i != n.len-1:
# separate by ", "
result.add(newCall("write", newIdentNode("stdout"), newStrLitNode(", ")))
else:
# add newline
result.add(newCall("writeLine", newIdentNode("stdout"), newStrLitNode("")))
사용 예제 :
let x = 2
let y = 3
debug("hello", x, y, x*y)
출력 :
hello, x: 1, y: 2, x * y: 6