_internal的语义是什么?

时间:2012-06-20 03:41:27

标签: dart

我在以下示例中继续看到对_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);似乎有点令人困惑,因为它似乎是类体内的一个语句而不是方法体内,这使我相信它实际上是没有方法体的内部构造函数定义。

我的假设是否正确?

1 个答案:

答案 0 :(得分:31)

_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");
}

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