【问题标题】:How does Google Dart handle namespaces / packages when converting to javascript?转换为 javascript 时,Google Dart 如何处理命名空间/包?
【发布时间】:2017-06-01 19:51:34
【问题描述】:

我有两个游戏项目:动物园 1 和动物园 2。两者都有一个名为动物的类。为了避免同名的两个类之间发生冲突,我将它们包装在函数中。 Dart 如何处理这种情况?通过包或库?用作命名空间的大师班?如果是这样,那么它如何将它们转换为 javascript?

【问题讨论】:

    标签: dart


    【解决方案1】:

    Dart 没有命名空间。您可以为此使用导入前缀

    import 'package:zoo1/zoo1.dart' as zoo1;
    import 'package:zoo2/zoo2.dart' as zoo2;
    
    main() {
      print(new zoo1.Animal());
      print(new zoo2.Animal());
    }
    

    您也可以仅将前缀用于其中之一

    import 'package:zoo1/zoo1.dart';
    import 'package:zoo2/zoo2.dart' as zoo2;
    
    main() {
      print(new Animal());
      print(new zoo2.Animal());
    }
    

    如果您想同时导入两者,但只想使用来自zoo2Animal,那么您可以隐藏一个

    import 'package:zoo1/zoo1.dart' hide Animal;
    import 'package:zoo2/zoo2.dart';
    
    main() {
      print(new Animal()); // uses Animal from zoo2 
    }
    

    我假设对于 JS,他们总是使用一些前缀来消除歧义。

    【讨论】:

    • 啊!因此,它们以赋予导入的名称作为前缀:class zoo2_zoo2。说得通。 Dart 可能是我用过的最好的语言。它是迄今为止最干净的。最好的来自 java、c# 和 javascript。您认为 google 会重新考虑将其集成到 chrome 中吗?我猜 js 的单一文化是牢不可破的。
    • 不,浏览器中的 Dart VM 不会发生,但 Dart-to-JS 会不断改进。浏览器中的 JS 在优化 x-to-JS 代码方面会变得更好。类、Promise 等 ES6 特性已经改进了这一点,并且可以在它们在所有浏览器中可用时使用。恕我直言,大多数人认为这是一个优势,因为浏览器中的 Dart VM 会使进一步发展该语言变得非常乏味。
    • Dart 已经做得很好了。更广泛的采用只是需要时间。它不像 Swift 那样没有其他选择。不过,Flutter 将带来巨大的推动作用。我希望他们最终会给服务器端支持更多的爱。社区变得越来越强大,这让我们不再依赖 Google Dart 团队来完成工作。
    • 对于一般性讨论,您可以加入gitter.im/dart-lang/TALK-general 或其他 Dart 房间之一
    • 感谢您的建议
    猜你喜欢
    • 2011-09-05
    • 2021-08-02
    • 1970-01-01
    • 1970-01-01
    • 2011-10-25
    • 1970-01-01
    • 1970-01-01
    • 2019-01-28
    • 1970-01-01
    相关资源
    最近更新 更多