问题标签 [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 投票
2 回答
4872 浏览

scala - Scala 中的副作用

这些天我正在学习 Scala。我对 Haskell 有一点熟悉,尽管我不能声称自己很了解它。

给不熟悉 Haskell 的人的附注

我喜欢 Haskell 的一个特点是,不仅函数是一等公民,而且副作用(让我称之为动作)也是一等公民。一个动作,在执行时会给你一个 type 的值a,属于一个特定的 type IO a。您可以像传递任何其他值一样传递这些操作,并以有趣的方式将它们组合起来。

事实上,结合副作用是 Haskell 中对它们做某事的唯一方法,因为你无法执行它们。相反,main执行的程序是您的函数返回的组合操作。这是一个巧妙的技巧,它可以让函数变得纯粹,同时让你的程序实际上做一些除了消耗能量之外的事情。

这种方法的主要优点是编译器知道您执行副作用的代码部分,因此它可以帮助您捕获错误。

实际问题

在 Scala 中是否有某种方法可以让编译器类型为您检查副作用,例如,您可以保证不会在某个函数内执行副作用?

0 投票
2 回答
223 浏览

ruby - 从 FP 的角度来看,在 YARV Ruby 中创建线程通常被视为副作用吗?

如果 Ruby 方法创建线程,但在方法中连接它们,从函数式编程的角度来看,这是否仍被视为副作用?我正在使用的实现是 YARV Ruby,其中线程由操作系统创建,尽管使用 GVL(全局 VM 锁)。

创建线程的原因是进行system调用,这无论如何都是副作用,但我从未遇到任何人说线程是否是副作用。

简化的伪代码如下所示:

0 投票
1 回答
93 浏览

iphone - iPhone应用程序的副作用

有没有办法衡量 iphone 应用程序对其他应用程序性能的副作用?至少使用黑盒焦点。

关于这种方向的监控应用程序有什么建议吗?

我发现我的应用程序对其他应用程序一无所知,但我想衡量我的应用程序对其他应用程序的某种影响,或者在无法估计整体系统性能的情况下。

谢谢你的帮助

0 投票
1 回答
406 浏览

c++ - 为什么“volatileQualifiedExpr + volatileQualifiedExpr”不一定是 C 中的 UB,而是 C++ 中的 UB?

当我今天阅读 C 标准时,它说的是副作用

访问 volatile 对象、修改对象、修改文件或调用执行任何这些操作的函数都是副作用

和 C++ 标准说

访问由 volatile glvalue (3.10) 指定的对象、修改对象、调用库 I/O 函数或调用执行任何这些操作的函数都是副作用

因此,因为两者都禁止在同一个标​​量对象上发生未排序的副作用,所以 C 允许以下情况,但 C++ 使其成为未定义的行为

我是否正确阅读规范?如果是这样,差异的原因是什么?

0 投票
2 回答
436 浏览

python - 为什么奇怪的列表理解行为有副作用?

我知道在 Python 列表推导中使用副作用不是一个好习惯。但我不明白为什么会发生以下情况:

无论这是否是好的做法,列表理解的内部不应该做一些可预测的事情吗?如果以上可以预测的,有人可以解释为什么只remove发生了三个操作,为什么偶数条目是剩下的?

0 投票
2 回答
615 浏览

macros - 宏应该有副作用吗?

宏扩展可以(或应该)有副作用吗?例如,这是一个宏,它实际上在编译时抓取网页的内容:

然后,我可以做(foo "http://www.pointlesssites.com/"),它将被替换为"\r\n<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\"\r\n\t <and so on>"

这是好习惯吗?我是否保证 Racket 只会运行此代码一次?如果我(display "running...")在宏中添加一行,它只会打印一次,但我不想从一个例子中概括......

PS - 我问的原因是因为我实际上认为这有时真的很有用。例如,是一个库,它允许您(在编译时)从 Google API Discovery 服务加载发现文档并自动为其创建包装器。我认为如果库实际上是从网络而不是从本地文件中获取发现文档,那将是非常酷的。

另外,举一个具有不同类型副作用的宏的示例:我曾经构建了一个宏,它将 Racket 的一小部分转换为(eta 扩展的)lambda 演算(当然,它仍然可以在 Racket 中运行)。每当宏完成函数的翻译时,它会将结果存储在字典中,以便以后调用宏可以在自己的翻译中使用该函数定义。

0 投票
1 回答
506 浏览

javascript - 在 JavaScript 中链接复合赋值运算符

在 C# 中,

写道abcabcabc(http://ideone.com/pFNFX2)。这很好,因为 C# 规范在第 7.16.2 节中明确指出

该操作被评估为 x = x op y,除了 x 只被评估一次。

但是,在阅读 ECMAScript 5.1 语言规范第 11.3.2 节中对复合赋值运算符的描述时,我在该运算符的语义中没有看到这样的“仅一次”限定符。相反,我看到的是:

  1. 令 lref 为评估 LeftHandSideExpression 的结果。
  2. 令 lval 为 GetValue(lref)。
  3. 令 rref 为评估 AssignmentExpression 的结果。
  4. 设 rval 为 GetValue(rref)。
  5. 令 r 为将运算符 @ 应用于 lval 和 rval 的结果。
  6. 如果以下条件都为真,则抛出 SyntaxError 异常:(截断)
  7. 调用 PutValue(lref, r)。
  8. 返回 r。

因此,看起来(对我来说,无论如何)以下 JavaScript 代码

会提醒abcabcabcabc(因为括号表达式中第 7 行的 PutValue),但是无论如何在 Chrome 22 中,它都会提醒abcabcabc.

所以我的问题是:我是误读了规范,还是 Chrome(也许是 V8?)做​​自己的事情不符合规范,可以这么说?

0 投票
1 回答
530 浏览

c++ - C++ 中的副作用和可观察行为如何相关?

C++03 标准 1.9/6 定义了可观察的行为

抽象机的可观察行为是它对易失性数据的读取和写入顺序以及对库 I/O 函数的调用。

然后 1.9/7 定义了副作用

访问由 volatile 左值 (3.10) 指定的对象、修改对象、调用库 I/O 函数或调用执行任何这些操作的函数都是副作用,它们是执行环境状态的变化。

副作用是可观察到的行为吗?它们是如何相互关联的?

0 投票
1 回答
8057 浏览

php - PSR-1 2.3 副作用规则

我有一个关于 PHP 基本编码标准 PSR1 的问题。PSR 1 规则 2.3 规定:

规则 2.3 副作用

一个文件应该声明新的符号(类、函数、常量
等)并且不会引起其他副作用,或者它应该执行具有
副作用的逻辑,但不应该两者都做。

短语“副作用”是指执行与
声明类、函数、常量等没有直接关系的逻辑,仅来自包含文件

“副作用”包括但不限于:生成输出、显式
使用 'require' 或 'include'、连接到外部服务、修改 ini
设置、发出错误或异常、修改全局或静态变量、
读取或写入一个文件,等等。

有人可以给我一个支持使用此规则的论据吗?或者,解释这条规则的好处,以及为什么它很重要或实施的好主意。这将帮助我支持 PSR 1 的全面实施并提出一个很好的案例。

0 投票
5 回答
2255 浏览

ruby - 从哈希中删除密钥的非破坏性方法

是否有从哈希中删除键值对的非破坏性方法?

例如,如果你做了

或者

thenoriginal_hash没有改变,new_hash也改变了,但它们有点冗长。但是,如果你这样做了

然后original_hash改变了,这不是我想要的。

有没有一种方法可以满足我的要求?