【问题标题】:Dart Factories and several main functions飞镖工厂和几个主要功能
【发布时间】:2013-05-05 18:05:28
【问题描述】:

我目前正在开发一个用 dart 替换 JavaScript 的网站。我想为普通用户隐藏一些代码,并为登录的用户显示一些其他代码。我的想法是(至少)有两个 dart 文件,它们都具有main() 函数,一个对普通用户可见,一个对普通用户隐藏.现在我有一个带有工厂返回缓存实例的类。但是,此实例不会从文件缓存到文件。如何在两个不同的 dart 文件中获得相同的实例?

编辑:代码示例

文件file1.dart

import "some_lib.dart";

main(){
    var a = new A("string1");
    print(a.string);
}

文件file2.dart

import "some_lib.dart";

main(){
    var a = new A("string2");
    print(a.string);
}

文件some_lib.dart

library some_lib;

class A{
    String string;
    static A _cached;

    factory A(String s){
        if(_cached == null){
            _cached = new A._internal(s);
        }
        return _cached;
    }

    A._internal(this.string);

}

文件index.html

<!DOCTYPE html>
<html>
    <head>
        <script type="application/dart" src="file1.dart"></script>
        <script type="application/dart" src="file2.dart"></script>
        <script type="text/javascript" src="packages/browser/dart.js"></script>
    </head>
    <body>
        <h1>THIS IS DARTA</h1>
    </body>
</html>

我希望这会打印出来

string1
string1

在控制台中,但我得到了

string1
string2

【问题讨论】:

  • 如果包含工厂构造函数的类被导入(在库中),那么应该缓存实例。你能提供更多细节吗?也许是一个例子?
  • 我也希望如此,但这不是我得到的。如果您得到不同的东西,请告诉我。
  • 请列出您正在执行的确切命令。如果您在浏览器中运行这些程序,请粘贴所有包含 &lt;script&gt; 标记的 HTML 文件。谢谢!

标签: dart


【解决方案1】:

两个独立的程序不能相互影响(通过文件和套接字等IO操作除外)。

据我所知,您使用两个不同的程序执行了两次虚拟机。他们的图书馆将完全独立。想象一下,一个具有全局状态的重要库(例如您提到的惰性工厂构造函数)存储在系统目录中。如果不是每个程序都复制该库,那么完全独立的程序就会相互干扰。

另一种看待它的方式:VM 为每个程序创建一个新的(隐式)隔离。程序有自己的副本和内存。即使在同一个程序中,您也只能通过消息传递在两个隔离之间进行通信(其中每条消息都被序列化和反序列化)。两个隔离区也会有不同的缓存工厂构造函数。

【讨论】:

  • 您有相关文档的链接吗?我真的很想完全了解这个领域。
  • 我明白了。但这与 JavaScript 的行为不同,您可以在一个文件中声明一个函数并在另一个文件中使用它。这种行为必须在某处记录?
  • 好的,我找到了这个:link
猜你喜欢
  • 2022-11-15
  • 2020-12-01
  • 2019-02-17
  • 1970-01-01
  • 1970-01-01
  • 2012-05-05
  • 1970-01-01
  • 1970-01-01
  • 2022-10-30
相关资源
最近更新 更多