您好我想写一个通用方法check_range()
,该方法可以作为参数raw_type
(vin
或vout
或il
等)并根据raw_type
调用相关方法calc_vin()
或calc_vout()
等。我尝试使用反射get_method()
:
type raw_t : [vin, vout, il, iin];
...
extend my_unit {
check_range(raw_type : raw_t) : uint {
var meth_name : string = appendf("calc_%s", raw_type);
var meth : rf_method = me.get_method(meth_name); //This line causes an error
// ....
};
calc_vout() is {
// Calculates Vout
};
};
当我调用check_range()
方法时,我收到错误:
Error: 'me' (of type my_unit_u) does not have 'get_method()' method.
如何使用反射calc_vout()
来处理get_method()
方法?非常感谢您的帮助
答案 0 :(得分:2)
为了使用反射工具,您需要使用" rf_struct" of my_unit_u。
具体来说,请尝试以下方法:
type raw_t : [vin, vout, il, iin];
...
extend my_unit {
check_range(raw_type : raw_t) : uint {
var meth_name : string = appendf("calc_%s", raw_type);
var my_unit_rf := rf_manager.get_struct_of_instance(me);
var meth : rf_method = my_unit_rf.get_method(meth_name);
// ....
};
calc_vout() is {
// Calculates Vout
};
};