问题标签 [side-effects]

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 投票
1 回答
224 浏览

side-effects - 从左到右评估顺序的语言中的序列点?

当评估顺序指定为“从左到右”并且语言是(伪)类 C时,以下示例中的序列点是什么?

0 投票
3 回答
1502 浏览

python - 有副作用的吸气剂

我创建了一个类,它的对象是用一堆 XML 代码初始化的。该类能够从 XML 中提取各种参数并将它们缓存在对象状态变量中。这些参数的潜在数量很大,用户很可能不需要其中的大部分。这就是我决定执行“惰性”初始化的原因。

在下面的测试用例中,这样的参数是title. 当用户第一次尝试访问它时,getter 函数会解析 XML,正确初始化状态变量并返回其值:

这看起来不错,对我来说效果很好。但是,getter 函数实际上是一个“setter”函数,因为它对对象有非常显着的副作用,这让我有点不安。这是一个合理的担忧吗?如果是这样,我应该如何解决它?

0 投票
7 回答
111 浏览

c++ - 分配给一个对象

以下技术是否有任何合理的解释:

而不是这个:

或这个:

您是否同意第一个代码片段(通常)是不良编程实践的一个例子?

0 投票
2 回答
573 浏览

go - Go 语言的副作用

有谁知道如何用 Go 语言编写具有副作用的函数?我的意思是像getcharC 中的函数。

谢谢!

0 投票
7 回答
8097 浏览

language-agnostic - 纯度与参考透明度

这些术语的定义似乎确实 不同,但我一直认为一个暗示另一个;我想不出任何情况下表达式是引用透明但不纯的,反之亦然。

维基百科为这些概念维护了单独的文章,并说:

参考透明度

如果表达式中涉及的所有函数都是纯函数,则表达式是引用透明的。此外,如果某些不纯函数的值被丢弃并且它们的副作用微不足道,则可以将它们包含在表达式中。

纯表达式

纯函数是构造纯表达式所必需的。[...] 纯表达式通常被称为引用透明的。

我发现这些陈述令人困惑。如果所谓的“不纯函数”的副作用微不足道,以至于不允许在不实质性更改程序的情况下不执行它们(即用它的替换对此类函数的调用),那么它就好像它是纯的一样第一,不是吗?

有没有一种更简单的方法来理解纯表达式和引用透明表达式之间的区别(如果有的话)?如果存在差异,将不胜感激提供一个清楚地证明它的示例表达式。

0 投票
3 回答
2569 浏览

c++ - C++ 编译器可以假设 const bool & value 不会改变吗?

C++ 编译器可以假设 'const bool &' 值不会改变吗?

例如,假设我有一堂课:

我使用它如下:

标准是否允许编译器假设_test的值不会改变。

我认为不是,只是想确定一下。

0 投票
1 回答
2132 浏览

xml - 使用 Powershell 进行外科 XML 编辑

我正在使用 Powershell 处理 csproj 文件来执行项目引用的大规模编辑。到目前为止,我已经设法使用以下几行编辑 ProjectReferences 上的 Include 属性:

这有效,并按照我的预期替换了适当 ProjectReferences 上的 Include 属性。但是,还有许多额外的“无害”更改,例如在自己的行上格式化所有标签,例如
<FileUpgradeFlags></FileUpgradeFlags>

变成

<FileUpgradeFlags>
</FileUpgradeFlags>

有什么方法可以执行没有这些副作用的编辑吗?

编辑:为了让任何因其他原因发现这篇文章的人清楚起见,Select-MsBuildXml 只是我围绕 Select-Xml 编写的一个包装函数,它使用 msbuild 命名空间预加载命名空间参数,然后扩展节点属性。

0 投票
1 回答
362 浏览

perl - Data::Dumper() 的副作用是什么?

如果我注释掉,Dumper($cmd_string)while永远不会执行循环。

Dumper() 对 $cmd_string 有什么副作用?

这是子调用之前的 $cmd_string :

如果我在没有 Dumper() 的情况下运行 Perl 调试器并在 $cmd_string 上使用 x 命令,那么它可以工作,但如果我只是单步执行代码,它就不起作用。

这是在仅单步执行子末尾的代码之后

现在,如果我在 for 循环之前 x $cmd_string 我在 sub 的末尾得到这个

0 投票
2 回答
1901 浏览

c++ - 使用 RapidXML/C++ 类指针副作用解析中的递归问题

我想分享一下我最近在尝试使用 RapidXML 在 C++ 中进行 XML 解析时偶然发现的这个奇怪但有趣的情况。

我想编写一个递归函数来搜索并返回给定节点的子节点中的特定节点。我的第一次尝试是:

它碰巧只与第一个孩子一起正常工作,但是如果您搜索嵌套在 XML 文件中更深的节点,则会找到该节点(我看到了 cout 的),但是在 return 语句之后,for 循环似乎运行了一个(或一些)更多时间(可能是因为递归的调用堆栈),然后退出并且指针丢失。

所以我尝试用一​​个临时变量来修复它,这样:

但是什么都没变。。

不幸的是,RapidXML 中的节点是类指针,所以在这种情况下,副作用会阻止我提取正确的结果。

任何人都发现了这种情况,或者以另一种方式解决了这个问题?

0 投票
3 回答
399 浏览

java - 在 java 调试中是否应用了 toString 副作用?

在 Eclipse 中调试 java 代码时,如果单击其中一个变量名称,则会打印该对象。对象的 toString() 方法用于打印它。如果某个 toString 方法有副作用并且我单击该类型的变量,它的 toString 的副作用是否会被应用(并且毫无疑问会搞砸一切)?