我正在尝试构建一个易于使用的模板系统。基本上我只想用不同的变量(字符串)创建一个切片,然后遍历切片并用{{}}实际值替换标记。因此,如果变量 ' name' 是onevar,它将在模板中查找{{onevar}}并将其替换为变量的实际值。
问题:如何获取变量名?基本上是源代码中的内容。是否可以 ?我已经尝试过一些带有反射的东西,但似乎我做对了。见下图
onevar := "something"
other := "something else"
var msg string
sa := []string{onevar, other}
for _, v := range sa {
vName := reflect.TypeOf(v).Name()
vName = fmt.Sprintf("{{%s}}", vName)
msg = strings.Replace(msg, vName, v, -1)
}
Run Code Online (Sandbox Code Playgroud) 给出以下Go方法:
func (t *T) TMethod(data *testData) (interface{}, *error) {
...
}
Run Code Online (Sandbox Code Playgroud)
我想反映参数的名称(data在这里).
我尝试了以下,但它返回结构名称(testData在这里):
reflect.ValueOf(T).MethodByName("TMethod").Type().In(0).Elem().Name()
Run Code Online (Sandbox Code Playgroud)
如何获取参数的名称?
在C++ 11或更高版本中是否有某种方法可以实现类似的行为:
int some_int;
std::string x=variable_name<some_int>::value; //Theoretical code
std::cout << x;
Run Code Online (Sandbox Code Playgroud)
结果应该是:
some_int
如果没有,是否有编译器特定的方法来做到这一点?我的目标是MSVS.
是否可以创建一个 Rust 宏来访问作为参数传递的变量的名称和值?
let my_variable: i32 = 5;
printvar!(my_variable); // => to print "my_variable = 5"
Run Code Online (Sandbox Code Playgroud)
例如,对于 C 宏,我们可以使用#运算符:
#include <stdio.h>
#define PRINT_VAR(x) printf("%s = %d\n", #x, x);
int main() {
int my_variable = 5;
PRINT_VAR(my_variable);
}
Run Code Online (Sandbox Code Playgroud)
$ ./a.out
my_variable = 5
Run Code Online (Sandbox Code Playgroud)