1

获取类中单个成员的符号的最有效方法是什么?

import 'dart:mirrors';

class TestClass{
    void iWantThisSymbol(){}
    void butNotThisOne(){}
}

/**
 * I can get all the symbols and filter down but this isn't nice
 */
void main(){
    var allSymbols = reflectClass(TestClass).instanceMembers.keys;
    var justTheSymbolIWant = allSymbols.where((symbol) => symbol.toString().contains('iWantThisSymbol')); // this doesnt seem very efficient or maintainable
}
4

1 回答 1

2
var justTheSymbolIWant = reflectClass(TestClass).instanceMembers[#iWantThisSymbol]

虽然,有点迂腐,你没有得到一个符号,你正在使用一个符号 ( #iWantThisSymbol) 来获取一个成员,在这种情况下是一个方法。所以我将其重写为:

import 'dart:mirrors';

class TestClass{
    void iWantThisMethod(){}
    void butNotThisOne(){}
}

void main(){
    var justTheMethodIWant = reflectClass(TestClass).instanceMembers[#iWantThisMethod];
}

另外,关于使用的一些事情where()

  1. 如果您确实想过滤符号列表,则不需要将它们转换为字符串,您可以直接比较符号实例。
  2. .where()返回一个可迭代的,即使只有一个项目匹配。你可能想要firstWhere()它总是返回一个项目。
var justTheSymbolIWant = allSymbols.firstWhere((symbol) => symbol == #iWantThisSymbol);
于 2014-05-15T03:49:43.750 回答