我在下面这样的示例中不断看到对_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);看起来有点混乱,因为它似乎是类主体中的语句,而不是方法主体中的语句,这让我相信它实际上是没有方法主体的内部构造函数定义.

我的假设正确吗?

推荐答案

_internal构造只是通常为该类私有的构造函数指定的名称(该名称不一定是._internal,您可以使用任何Class._someName构造创建私有构造函数).

例如,下面的代码只允许您使用缓存构造函数从类外部创建新的Person:

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

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

Dart相关问答推荐

Flutter/Dart 为 Google Maps Marker 添加自定义点击事件

Flutter:合并两张图片,作为单张图片存储在本地存储中

`pub get` 将 pubspec 依赖项下载到哪里?

如何在 Flutter 中忽略整个文件的 lint 规则?

如何签署 Flutter 的应用程序

Flutter 中的嵌套数据和 BLoC

dart:类构造函数被标记为const是什么意思

判断无状态小部件是否在Flatter中处理

如何使我的对话框可滚动?

Dart-对base64字符串进行编码和解码

不推荐使用AnteStorStateofType,请改用findAncestorStateOfType

Flutter判断变量是否为 NaN

在字符串中查找字母 (charAt)

将符号转换为字符串

Dart 库中part和part of背后的原因是什么?

轻松判断数字是否在 Dart 的给定范围内?

如何在 Dart 中比较两个对象以查看它们是否是同一个实例?

Dart 中的函数重载

Dart中var和dynamic类型的区别?

在 Dart 中验证邮箱地址?