Dart 当给定字符串作为方法名时动态调用类方法
考虑JavaScript中的以下代码:Dart 当给定字符串作为方法名时动态调用类方法,dart,Dart,考虑JavaScript中的以下代码: 类的东西{ foo(){console.log('foo')} bar(){console.log('bar')} } const thing=新事物(); for(设i=0;i
类的东西{
foo(){console.log('foo')}
bar(){console.log('bar')}
}
const thing=新事物();
for(设i=0;i<5;i++){
const methodName=i%2!==0
“福”
:“酒吧”;
thing[methodName]();//这里的这部分是重要的部分
}
这样的事情在Dart中可能发生吗?我希望动态调用一个方法。在Dart中,什么是被认可的方式?if/else链或开关是唯一的方法吗
void main(){
TestThing test=TestThing();
对于(int i=0;i<5;i++){
最终方法=i.isOdd
“福”
:“酒吧”;
test[method]();//错误:没有为TestThing类定义运算符“[]”
}
}
类测试{
TestThing();
int foo(){
印刷品(‘foo’);
返回1;
}
整型条(){
打印(‘条形’);
返回2;
}
}
是的,这可以通过。
以下是您的示例将如何实现它:
导入“dart:mirrors”;
类测试对象{
int foo(){
印刷品(‘foo’);
返回1;
}
整型条(){
打印(‘条形’);
返回2;
}
}
void main(){
TestThing test=TestThing();
InstanceMirror mirror=反射(测试);
对于(int i=0;i<5;i++){
最终方法=i.isOdd
“福”
:“酒吧”;
invoke(方法,[]);
}
}
您实际上不需要为此使用dart:mirror
。您可以在类上实现noSuchMethod
,并在这里定义应该发生什么。您需要将变量标记为dynamic
,以告知编译器您的类型错误是故意的:
void main() {
final dynamic test = TestThing();
for (int i = 0; i < 5; i++) {
final method = i.isOdd ? 'foo' : 'bar';
test[method]();
}
}
class TestThing {
TestThing();
int foo() {
print('foo');
return 1;
}
int bar() {
print('bar');
return 2;
}
@override
dynamic noSuchMethod(Invocation invocation) {
return () =>
print('You tried to fetch: ${invocation.positionalArguments.first}');
}
}