当前位置: 首页 > 知识库问答 >
问题:

飞镖单例中的奇怪行为

张唯
2023-03-14

我想学习一些单例类并实现。我引用了这篇文章https://stackoverflow.com/a/12649574/6323093 .

我的实现是这样的。所有源文件都是相同的lib目录。

Singleton.dart

class Singleton {
    static final instance = Singleton();
    int value = 0;
}

user1.dart

import 'singleton.dart'; // non-package expression

int getValue1() {
    return Singleton.instance.value;
}

setValue1(int val) {
  Singleton.instance.value = val;
}

用户2。飞奔

import 'package:singleton/singleton.dart'; // package expression

int getValue2() {
    return Singleton.instance.value;
}

setValue2(int val) {
  Singleton.instance.value = val;
}

主要的飞奔

import 'user1.dart';
import 'user2.dart';

// below is test code
setValue1(99)
setValue2(999)
// My expected behavior is both '999'... why??
print(getValue1()) // -> 99
print(getValue2()) // -> 999

在上面的代码中,我预计getValue1()getValue2()都是999,但实际结果是99999

当我改变user2.dart的导入语句到导入'singleton.dartuser1.dart的导入语句到'包:单例/singleton.dart';时,结果是999(如我所料)。

这是Dart的行为吗?或者这种行为是臭虫?

我很困惑,因为我认为导入表达式,package和non-package,都是完全相同的意思。

共有2个答案

凌伟泽
2023-03-14

我在拼写输入错误时也遇到了同样的问题:

import 'backend/backend.dart';
import 'backend/Backend.dart';

事实证明,它们都提供了不同的实例(!)

江英卓
2023-03-14
import 'user1.dart';
import 'user2.dart';

很可能是罪魁祸首。

lib/main中相对导入。众所周知,dart会导致此类问题。

换成

import 'package:my_flutter_project/user1.dart';
import 'package:my_flutter_project/user2.dart';

它应该如预期的那样工作。

在其他文件中,相对导入是可以的。

与Dart相关的问题是https://github.com/dart-lang/sdk/issues/33076修复工作应该正在进行中。

 类似资料:
  • 我在http://www.nodebeginner.org上读了一篇教程,我在数据输出中有一个奇怪的行为。我知道,Stackoverflow也有类似的问题,但没有答案。所以我有这个Web-Server的代码: 调用RequestHandler.Upload的Router.js代码-我的buggy函数 和RequestHandler.Upload的代码 假设POST数据中有一个字符串。该函数的第一行

  • 我有以下代码来解析一个JSON文件: 要处理以下JSON文件: 如果我执行此代码,我将收到以下错误: 所以我开始一步一步地调试应用程序,看看part processing()中的哪个代码部分抛出了这个异常。令人惊讶的是,那里的所有代码都正常执行:没有抛出异常,也没有返回结果I except。 更让我惊讶的是,当我稍微改变第一种方法的代码时,它可以在不产生异常的情况下工作。 我不知道println方

  • 问题内容: 请注意:我对使用Polymer对此不感兴趣; 我想使用“纯”飞镖! 我正在尝试为Dart应用程序构建一个简单的登录屏幕,并且很难将两个表单变量(和)发送到服务器端POST: 这是我的主要HTML文件(): 这是我的主要Dart文件(): 当我在浏览器中运行此程序时,我看到登录屏幕出现,但是当我单击登录按钮时,什么都没有发生,并且Firebug在交叉编译,混淆,缩小的JavaScript

  • 我正在编写一个DocumentFilter,它将输入JTextField的所有单词“top”替换为逻辑top符号。 使用此代码很好,但是它很烦人,因为用户必须重新键入他们的空间,他们可以这样做,并且文本继续在同一行上 当用户继续键入文本时,使用此代码并在空格中添加替换符会导致顶部符号和JTextField中的所有文本稍微向上推,然后转到下面并开始一行新的内容 有人能解释一下这种行为,并希望能提供一

  • 我在做Maven项目。我用log4j做了一个日志。但它在给定的文件中显示了一些starnge日志。我试图理解,为什么会出现这种奇怪的日志,但我不明白。请帮助我,为什么这些不需要的行会进入日志文件。 请帮我把这个拿开。 log.properties 我通过阅读这个链接创建了这个文件。 代码是 日志txt-(log.txt的一些起始行)

  • 使用方式如下: 这是有效的解决方案吗?如果删除未使用的“魔术”变量 - 我在返回字符串后有分割错误。做错了什么? $gcc--version gcc(Debian 4.4.5-8)4.4.5 $uname-Linux深度站(挤压)2.6.32-5-686#1 SMP 5月10日星期五08:33:48 UTC 2013 i686 GNU/Linux