问题标签 [global-state]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
2153 浏览

testing - 如何避免全局状态?

所以,我正在阅读谷歌测试博客,它说全局状态很糟糕,很难编写测试。我相信——我的代码现在很难测试。那么如何避免全局状态呢?

我使用全局状态(据我所知)最重要的事情是管理我们的开发、验收和生产环境之间的关键信息。例如,我有一个名为“Globals”的静态类和一个名为“DBConnectionString”的静态成员。当应用程序加载时,它会确定要加载的连接字符串,并填充 Globals.DBConnectionString。我在 Globals 类中加载文件路径、服务器名称和其他信息。

我的一些函数依赖于全局变量。因此,当我测试我的函数时,我必须记住首先设置某些全局变量,否则测试将失败。我想避免这种情况。

有没有管理状态信息的好方法?(或者我是否错误地理解了全局状态?)

0 投票
4 回答
952 浏览

multicore - 纯函数可以读取全局状态吗?

请注意:通过“纯”功能,我不是指“纯虚拟”
,我指的是这个

如果一个函数“读取”了一些全局状态,这会自动使它变得不纯吗?还是取决于其他因素?

如果它自动使其不纯,请解释原因。

如果它取决于其他因素,请解释它们是什么。

0 投票
1 回答
794 浏览

asp.net-mvc - asp.net mvc 应用程序中的全局状态

问题:我们的 Web 控制台显示安装了我们的应用程序的所有计算机的列表。每台机器都有一些可以与之关联的识别信息。简单的字符串,如部门名称、团队名称等。我们需要让用户可以更改这些标识字段的名称,并根据需要添加/删除任意数量。我们如何才能最好地实现这一点?

最初我认为我可以将其实现为单例。在应用程序启动时,我可以从数据库中读取最后一组标识字段名称,并创建一个字符串列表的单例实例。这可以传递给所有需要显示或访问身份信息的函数。此选项的吸引力在于,如果用户从 ui 更改身份字段名称或添加或删除字段,我可以简单地修改单例对象并且更改将被反映。

但是我觉得必须有更好的方法来实现我想要的。因为有很多这样的信息,用户可以随意修改,我们需要跟踪。

有什么建议么?

0 投票
6 回答
1686 浏览

perl - Perl 的触发器操作符有问题吗?它具有全局状态,我该如何重置它?

我很沮丧。好的,所以这可能是我发现的最有趣的 Perl错误了。即使在今天,我也在学习有关 Perl 的新知识。本质上,触发器运算符..返回false直到左侧返回true,然后返回true直到右侧返回false保持全局状态(或者这就是我的假设。)

我可以重置它吗(也许这将是对几乎从未使用过的 Perl 4-esque 的一个很好的补充reset())?或者,有没有办法安全地使用这个运算符?

我也没有看到这个(全局上下文位)记录在任何地方,perldoc perlop这是一个错误吗?

代码


剧透

0 投票
2 回答
392 浏览

php - PHP中是否存在全局跨请求跨会话状态?

我想缓存一些数据供我的所有请求使用。我想要一个内存缓存,它会在代码文件更改时被刷新(信息是通过反射获得的,更改代码文件可能会使它失效)。如果没有第 3 方外部服务(如 memcached),这可能吗?

补充:我知道像 apache 这样的网络服务器会创建几个工作进程。如果他们每个人都有自己的缓存,那也没关系。

0 投票
3 回答
348 浏览

database - 为什么数据库不被视为一种全局状态?

我对这种差异有一种普遍的直觉,但我无法准确指出是什么使数据库与全局状态不同。

对于“全局状态”的简单定义,数据库通常至少是应用程序全局的。可以想象,您可以拥有一个在执行过程中更改数据库的应用程序,但在一般情况下,它是全局使用的。

至于状态,我认为我不需要争论数据库包含状态的情况。

那么,是什么让数据库不同于“坏”的全局状态呢?

出现这个问题是因为我试图避免紧耦合对象需要了解其父对象。

例如,假设您正在玩一款策略游戏,而您的一个单位具有一种能力,即当它对敌方单位造成伤害时,该单位的所有者会损失 x 金币,其中 x 是造成的伤害量。

嗯,在正常情况下,一个单位不应该知道它的所有者是谁。所有者是控制单元的人,因此所有者只需向单元发出命令,它就会做它的事情。

但是,由于外部因素,需要找出单位的所有者是谁。在这种情况下,攻击单位知道它正在攻击的单位,这很好。但是现在除了知道它正在攻击的单位之外,它还必须进一步知道它的所有者才能使所有者损失 5 金币。

我已经偏离了最初的问题,超出了我的预期,但是如果游戏的状态存储在关系数据库中,那么查询目标的所有者将是微不足道的,而单位不需要直接知道他们的所有者是谁。如果这样的数据库是一个对象,我会称该数据库为上帝对象,因为它知道所有事物的整个状态,而且是可变的。

那么,是什么让数据库不同于全局状态呢?

0 投票
0 回答
223 浏览

functional-programming - 减少可变共享状态

所以我正在学习光线追踪教程,试图伸展我的 F# 腿。由于本教程是用 C++ 编写的,因此弄清楚如何以函数方式应用这些概念是一个相当有趣的挑战。我想以尽可能实用的方式编写所有内容,因为我打算最终并行运行光线追踪器。但这让我陷入了以下情况,我确信它的核心出现在光线追踪以外的主题中。

我们有一个Engine对象(除其他外)存储一个Scene对象(对象的集合Primitive)。目前,其中的 theScenePrimitives 是完全不可变的。

为了尝试改进渲染时间,我们正在实现一个常规的 3D 网格。为了以有效的方式遍历网格,本教程在遍历算法和减少跨越网格边界的图元的交叉测试数量方面都参考了这篇论文。以下是后一部分的工作原理:

  • 每个都Ray被分配一个唯一的rayID
  • 每个Primitive都有一个lastRayID字段。
  • 当 aRay检查与 a 的交集时Primitive
    1. 如果 的rayID等于RaylastRayIDPrimitive则跳过相交测试。
    2. 否则,将执行测试,并将 的rayID存储Ray在 的lastRayID字段中Primitive

这是一种缓存相交测试的巧妙方法,但它是为顺序光线追踪器设置的,即使是两条并发光线也根本不起作用。因此,尽管我可以使用mutable场,因此能够实现该算法,但它并不能满足我固有的可并行化光线追踪器的最终目标。

我确实有一个想法。使用每个图元存储可变状态的问题在于,就渲染算法而言,场景是一个全局实体——每条光线都可能撞击任何图元。另一方面,每条光线都是完全独立的。所以在每条光线中,我想我可以建立一组已经过测试的原语(这个集合相当于lastRayID上面描述的字段)。这样做的问题是每条光线的生命周期非常短,并且在任何给定时间都可能存在许多光线,因此在每条光线中设置这样的数据结构可能会很昂贵((取消)分配时间和内存消费成本可能会迅速增加)

有人对处理这些情况有什么建议吗?即使这是关于将共享可变状态转换为本地可变状态或类似的一般想法,我相信这会对我有很大帮助。如有必要,我很乐意澄清任何事情。

0 投票
2 回答
407 浏览

ruby - 在多个 Thor 任务中共享全局数据的最佳实践

我目前正在构建一个支持多个不同任务的 Thor 可执行文件。一些任务调用其他任务。例如

  • 认证
    • 验证本地用户
  • 创造
    • 调用身份验证
    • 做某事
    • 调用配置
  • 配置:
    • 调用身份验证
    • 做某事

thor 的好处是我现在可以分别调用所有三个任务,但请确保仅通过调用调用一次身份验证。

但是现在在这些任务之间共享数据的最佳方式是什么。例如,在进行身份验证时,我想设置当前用户的用户 ID。因此,当我想从我们的网络服务请求数据时,我可以以相同的方式从代码中的任何位置获取用户 ID。

现在我正在通过模块实现这一点,但我不确定这是否是最好的方法。

使用 Singleton 将是另一种方式,但不知何故,这似乎有点太多了。

也许你们有更好的方法来做到这一点,或者也许使用模块是存储信息的最佳方式。

0 投票
1 回答
2843 浏览

mysql - uptime 和 uptime_since_flush_status 有什么区别?

我一直在阅读 mysql 全局状态变量,我看到两个值:

  • 正常运行时间
  • uptime_since_flush_status

是什么uptime_since_flush_status意思?

0 投票
7 回答
4482 浏览

android - 如何将变量从主要活动发送到android中的多个活动?

我正在尝试创建一个具有

  1. MainActivity
    它是一个登录页面,它包含 4 个变量,当我单击登录按钮时,它会使用意图转到另一个活动 HomeTab
    Intent i = new Intent(FirstMain.this,Home_tab.class);
    startActivity(i);

  2. HomeTab - 它有三个选项卡视图。
    一种。简介
    B. 账户
    C. 设置

我的问题是如何将 MainActivity 中的 4 个变量传递给 Tab 中的 3 个活动