_internal的语义是什么?

w.b*_*ian 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);
}
Run Code Online (Sandbox Code Playgroud)

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

我的假设是否正确?

Lar*_*ann 41

_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);
}
Run Code Online (Sandbox Code Playgroud)

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

_globalToThisLibaryOnly() {
    print("can only be called globally within this #library");
}
Run Code Online (Sandbox Code Playgroud)

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

  • 再次感谢,拉尔斯.这有很大帮助.还有一些我不完全理解的东西,比如,构造函数可以选择有一个方法体?定义为final的类成员只能在构造函数的参数列表中设置,而不能在构造函数体中设置?这些是一些仍然让我感到困惑的事情. (3认同)
  • 除了 **Class._someName** 也可以是 **Class._** (2认同)
  • 不是来自“外部”,而是来自内部。那里有错字。无法编辑,因为 stackoverflow 上出现“建议的编辑队列已满”错误。 (2认同)