问题标签 [pure-function]
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.
javascript - 为什么这种纯函数的实现不被认为具有外部依赖关系?
我pure function
对非常简单的例子的概念很好,比如......
给定相同的参数,它会产生相同的结果,从而导致参照透明度和良好的确定性代码。
但是后来我遇到了这样的例子(取自Frisby 教授,大部分是足够的指南,但我在其他 FP JS 书籍中找到了类似的例子)
而且我不明白为什么不将对saveUser
or的调用视为外部依赖项(因此,不纯) welcomeUser
。
我知道从函数/IO 的角度来看,signUp
总是返回“相同”(等效)的有线函数,但我感觉很奇怪。
我很难理解为什么
被认为是pure
。从返回的函数 POV 中,访问times
是对作用域链的查找,它可以来自直接外部作用域,也可以来自外部(如全局作用域)。
有人想为这件事带来一些启示吗?
caching - Clojure 的 `memoize` 函数在缓存慢速 sql 查询和复杂计算时有用吗?
我的项目有一个 mysql 数据库和一个由 Clojure 编写的后端。
数据库的某些表每天只更新一次,以查询我们将使用的最新信息。
但:
数据库很大,网络很慢,所以每次查询都需要几秒钟。
我们需要在每次查询后进行复杂的计算。
我们需要执行多种 sql 查询,因此保存每个 sql 查询的结果是不现实的。
为了调试,我们需要非常频繁地更改计算函数。
在慢 sql 查询的情况下,现在所有的事情对我们来说都太慢了。
幸运的是,我们的数据每天只会更新一次,而且我们从数据库中获取的一些查询非常频繁地使用。
所以我们要缓存经常使用的sql查询和中间结果。
Clojure 的memoize
功能对这类工作有用吗?我担心 sql 查询不是纯的,所以memoize
不应该缓存它们的结果。但是一天之内,我们的 sql 查询的结果必须是相同的。
那么我可以memoize
一天的结果,第二天自动更新结果吗?
谢谢您的帮助!
scala - 为什么 Akka Actor 的默认行为是一个接一个地处理消息?
我读过一个 akka 演员一个接一个地处理消息。为什么是这样?
我无法理解的是“为什么同步执行消息是默认行为?”。我确实明白,对于邮箱消息的并行执行,功能(要执行的作业)应该有 0 副作用。
这是默认的 akka 行为吗,因为具有绝对独立执行和 0 副作用的用例是少数,我们通常处理需要公共资源的作业。
如果 scala 和函数式编程的设计目标是 0 副作用代码,以下场景适用,那么为什么这不是 akka actor 消息处理中的默认行为。
c++ - GCC 错误:如果已知函数正常返回,则函数可能是属性“纯”的候选者
鉴于此代码:
g++ -Werror=suggest-attribute=pure
抱怨:
错误:如果已知函数正常返回,则函数可能是属性“纯”的候选者
这对我来说似乎很奇怪——不是很明显该函数不知道正常返回吗?有没有办法告诉 GCC 它并不总是正常返回,或者我不希望这个警告出现在这个特定的功能上?
reactjs - 为什么 ReactJS 组件必须像纯函数一样工作?
文档说所有 React 组件在其 props 方面都必须像纯函数一样工作。 https://facebook.github.io/react/docs/components-and-props.html,但没有解释背后的真正原因,这是为什么呢?
c++ - 将函数声明为纯函数或 const 对 GCC 的影响,当它不是时
GCC 可以使用标志-Wsuggest-attribute=pure
和-Wsuggest-attribute=const
.
GCC 文档说:
许多函数除了返回值外没有任何影响,它们的返回值仅取决于参数和/或全局变量。这样的函数可以像算术运算符一样进行公共子表达式消除和循环优化。这些函数应该用纯属性声明。
但是,如果您附加__attribute__((__pure__))
到与上述描述不匹配且确实有副作用的函数,会发生什么?仅仅是函数被调用的次数比您希望的次数少,还是可能创建未定义的行为或其他类型的严重问题?
同样,__attribute__((__const__))
哪个更严格 - 文档指出:
基本上这只是比下面的纯属性稍微严格的类,因为不允许函数读取全局内存。
但是,如果您附加到一个访问全局内存的函数,实际会发生什么呢?__attribute__((__const__))
我更喜欢在 GCC / G++ 范围内解释实际可能场景的技术答案,而不是在提到未定义行为时出现的通常的“鼻恶魔”挥手。
react-native - 组件应该写成纯函数
我有一个 react-native android 应用程序。我在 index.android.js 中的组件是无状态的,所以 eslint 抛出错误“组件应该写成纯函数”。如果我将组件作为纯函数,我如何注册应用程序或实例化应该如何?
php - 可以将外部依赖于静态配置的方法视为纯方法吗?
我正在上这堂课。
配置是在启动时设置的,并且在运行时无法更改,因此对于特定的运行时,相同的参数将始终给出相同的结果,但我们不能对程序的不同实例说同样的话。
可以getVal(string)
认为是纯函数吗?
相同功能的另一个非 OOP 版本是:
vhdl - VHDL:纯函数代码没有覆盖,但函数调用被覆盖
我有以下 VHDL 代码:
s1 := 行与纯函数 sInitSyncSupport 中的所有语句一样被覆盖。
在 ModelSim_10.1c 生成的代码覆盖率报告中,s2 := ... 行被覆盖了数十次,但纯函数 sStartSync 中的所有语句似乎都未被覆盖。
有人知道为什么会这样吗?谢谢你。
更新:
这是一个更完整的代码:
我标记了!!! 敏感线。非常感谢。
wolfram-mathematica - 这个 Mathematica 拆分函数中的夏普符号的含义
我在理解 Mathematica 中的尖锐符号时遇到了一些问题。我理解# &
为变量的占位符。但是在下面的代码中是如何理解的#1
呢?#2
什么是#1
和#2
这里?这些行的输出是