46

我不断在以下示例中看到对 _internal 的引用:

class Symbol {
    final String name;
    static Map<String, Symbol> _cache;

    factory Symbol(String name) {
        if (_cache == null) {
        _cache = {};
     }

     if (_cache.containsKey(name)) {
        return _cache[name];
     } else {
        final symbol = new Symbol._internal(name);
        _cache[name] = symbol;
        return symbol;
      }
    }

  Symbol._internal(this.name);
}

我从代码中收集到它是一个私有可访问的构造函数。最后一行Symbol._internal(this.name);似乎有点令人困惑,因为它似乎是类主体中的语句,而不是方法主体中的语句,这让我相信它实际上是没有方法主体的内部构造函数定义。

我的假设正确吗?

4

1 回答 1

64

_internal构造只是通常给类私有的构造函数的名称(名称不需要是._internal ,您可以使用任何Class._someName构造创建私有构造函数)。

例如,以下代码仅允许您使用缓存构造函数从类外部创建新人员:

class Person {

    final String name;
    static Map<String,Person> _cache;

    factory Person(String name) {
        if(_cache === null) {
            _cache = new Map<String,Person>();
         }
         if(_cache[name] === null]) {
            _cache[name] = new Person._internal(name); 
         }
         return _cache[name];
    }
   
    Person._internal(this.name);
}

通常,Dart 将任何_construction视为类或包含它的库的私有。例如,您可以定义为这样的全局函数:

_globalToThisLibaryOnly() {
    print("can only be called globally within this #library");
}

可以从定义它的库中的任何文件调用它。

于 2012-06-20T03:55:46.273 回答