问题标签 [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.

0 投票
1 回答
164 浏览

c - 如果纯函数调用“非纯”函数,GCC 会发出警告/错误吗?

我发现了 gcc 属性pure并喜欢使用它,因为在我看来,它是在我的界面中添加附加信息的好方法(除了const关键字),如果我正确理解了它的用途,将允许我的编译器优化我的更轻松地编写代码。

但在我看来,纯函数应该只能使用本身是纯函数的函数。是否可以启用特定警告来检查pure函数是否仅使用pure函数(此外,赋予纯函数的函数指针参数也是纯函数)?我想第二点可能更棘手。

使用-Wall -Wextra -pedantic-errors,我无法发出任何警告。

也许我做错了,但我总是更喜欢让我的工具执行我决定应用的纪律,而不是仅仅指望明天早上我不会忘记它。

编辑

编译器可以在没有关于纯度的类型信息的情况下自动检测纯函数吗?是相关的,但在我看来,我的问题要简单得多(尽管我可能错了):它不是关于在没有开发人员提供的信息的情况下检测一个函数是否是纯函数,而是检查它内部调用的函数是否被标记一样的方法。换句话说,通过对被调用函数应用某种类型检查,通过(理论上的)调用堆栈检查“纯度”的一致性。

0 投票
1 回答
48 浏览

javascript - 使用 JavaScript 的多个内联纯函数调用...?

我正在为解决 JS 和纯函数中的问题而摸不着头脑。下面是一个不纯函数的示例,但有助于理解它的作用。

如果我需要使其纯净以避免任何副作用怎么办?在以下示例中,出现了不纯函数的问题。

谢谢!

0 投票
2 回答
1334 浏览

scala - map 如何在 Scala 中的 Options 上工作?

我有这两个功能

Map 是将给定函数应用于列表的每个元素的高阶函数。

现在我不知道地图是如何按照上述声明在这里工作的。

0 投票
0 回答
385 浏览

javascript - 如何在 Node 中安全地对纯 JavaScript 函数进行沙箱处理?

我希望能够在 Node 应用程序中安全地执行第三方 javascript。他们提供的代码必须是完全纯的,这意味着我可以很高兴地将它们与全球可用的任何东西隔离开来。

他们将需要调用某些库,但我可以提供一种形式的 require 函数,该函数仅限于提供其他纯函数。除了我给他们的东西,他们不需要任何东西。他们应该无法使用任何技巧来访问我包装他们的函数的闭包之外的任何内容。

有谁知道这是否可能?

0 投票
2 回答
82 浏览

javascript - 使用纯函数创建组合函数

我试图了解组合函数和纯函数。

我有一个混合数据的对象。在某些价值观上,我需要:

  1. 删除值的单位
  2. 将字符串解析为整数
  3. 转换为数值小数

我编写了三个函数,试图让它们变得纯粹,因为它们只做一件事,但严格来说,它们是变异状态。我不确定如何避免突变状态,如果这在技术上使它不是纯函数?

我的三个“纯”功能是:

然后我试图在lodash的帮助下将这些函数组合成一个函数 compose()

当我尝试运行它时,console.log("prepValue", prepValue(weather.current.temperature))我在终端中得到以下信息:

所以主要的事情是,

  1. 如何使我的三个功能“纯”
  2. 我怎样才能将这些功能组合成 1
0 投票
2 回答
54 浏览

javascript - 计算对象中属性的总持续时间

我在数组 [0] 中有以下对象:

end_datatime 格式为 yyyymmddMhhmmss(前 4 位数字是年,后跟月、日、分隔符“M”、小时、分钟和秒。

我想计算所有事件的总持续时间?(总共 11 小时,即 2 小时睡眠 + 4 小时早餐 + 1 小时课程 + 4 小时滑雪)

0 投票
0 回答
223 浏览

javascript - Javascript 中的纯异步任务

结合RamdaFolktale函子

_fetchLists是一个执行异步操作的函数,它接受以下参数:

  1. fetchAlllists: 一个异步函数,使用列表对象数组的Result函子解析
  2. listIds: listIds 数组

    它是列表对象数组的returnsResult函子

    • _fetchLists认为是纯函数吗?
    • fetchAlllists实现返回一个用Result解决的承诺,使用Task仿函数而不是普通的承诺有什么好处吗?
0 投票
2 回答
13173 浏览

reactjs - 为什么 React 中的 props 是只读的?

React 文档说: React is pretty flexible but it has a single strict rule: all React components must act like pure functions with respect to their props.

这是为什么?

我猜如果你直接改变 props 的值,组件不会重新渲染,这就是为什么我们必须使用setState. 但我仍然不明白这背后的原因。为什么组件就其 props 而言必须像纯函数?

0 投票
3 回答
392 浏览

powershell - Powershell 中的显式返回

我可以在javascript中编写以下代码:

然后得到一个值

我想在 Powershell 中做同样的事情,但我阅读了以下指南:

PowerShell 也知道 return 关键字;但是,它遵循不同的逻辑。通常,return 的目的是结束代码段的执行并将控制权交还给父块。

如果在 return 语句中添加参数,则该值确实会返回给调用子程序。但是,这也适用于所有其他带有输出的语句。这意味着函数中产生的任何输出都将与返回参数一起存储在变量中。

我想这样做是为了拥有纯功能。然而,它似乎在做

var someNum = sum(2,5);

完全是多余的,当我可以调用上面的函数时,在其中定义someNum,它将在全局范围内可用。

我是否遗漏了什么,或者是否可以在 Powershell 中编写不返回函数内部所有内容的纯函数?


有点切线,但这是我的实际代码:

接着:

我根本不清楚这段代码 - runningGetPreviousKeyMD5Hashes确实 set $previousScripts,但这对于在我之后修改它的人来说完全不清楚。我唯一的另一种选择(afaik)是将所有这些都排成一行,这也是不可读的。

0 投票
2 回答
1165 浏览

java - 纯函数可以改变输入值吗?

我正在学习函数式编程,我刚刚读到了纯函数。

我的问题是:一个纯函数可以改变它的参数吗?

这个函数是纯的吗?