我如何获得变量名称?例如,
def get_var_name(var)
# return variable name
end
myname = nil
get_var_name myname #=> myname
Run Code Online (Sandbox Code Playgroud)
初衷:
somevar = "value"
puti somevar #=> somevar = "value"
# that is a shortage for
# `puts "somevar = #{somevar.inspect}"`
Run Code Online (Sandbox Code Playgroud)
我的尝试:
def puti(symb)
var_name = symb.to_s
var_value = eval(var_name)
puts "#{var_name} = #{var_value.inspect}"
end
puti :@somevar # that actually will work only with class vars or whatever considering var scope;
Run Code Online (Sandbox Code Playgroud) When you are debugging, it's very useful to do this:
var = calc()
print("var:", var)
Run Code Online (Sandbox Code Playgroud)
Is there any language where this is easy to do? In C and C++ you can use the stringify macro operator # and in Ruby I found this question:
使用符号:var和块的解决方案就是我想要的.
在D中,我使用了这个:
void trace(alias msg)() {
writeln(msg.stringof ~ ":" ~ to!string(msg));
}
Run Code Online (Sandbox Code Playgroud)
但我不确定这是最好的方法,因为它只适用于简单的情况.我尝试了几种方法,但有时你可以得到字符串,但不是值(因为变量超出范围),或者你必须首先混合模板然后调用函数.
那么其他语言呢?蟒蛇?F#?嘘?Shell脚本(无论哪个shell)?Perl的?(我更喜欢远离Perl,tho).TCL?Lisp,Scheme?Java的?(Java不太可能这样做).
即使在我找到某种解决方案的语言中,它也适用于简单的情况.如果我想要打印任意表达式怎么办?
如果我正在设计一种语言,这个功能将是必备的.:-)