问题标签 [first-class-functions]

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 回答
1353 浏览

c++ - 我可以在 C++ 中创建一个匿名的即时类(接口的实现)吗

在 C++ 中,我可以动态创建接口的实现(理想情况下绑定本地范围的变量。)不知道如何更好地解释它,所以我会写下我希望代码看起来像的样子(大致):

我意识到我在这里问了两个问题——你能像这样创建一个匿名类吗,你能从本地范围绑定变量吗(就像我提到的 myName 一样)。但我需要两者才能有用。

如果无法完成上述操作,那么就简洁性/缺乏样板而言,最接近使用 C++11 lambda 或类似方法的方法是什么。

0 投票
3 回答
1582 浏览

swift - Swift 闭包和一等函数有什么区别?

在 Swift 文档中,Apple 是这样说的:

闭包是可以在代码中传递和使用的独立功能块。Swift 中的闭包类似于 C 和 Objective-C 中的块以及其他编程语言中的 lambda。

我认为这是一流功能的定义

他们也这样说:

闭包可以从定义它们的上下文中捕获和存储对任何常量和变量的引用。这被称为关闭这些常量和变量。Swift 为您处理所有捕获的内存管理。

我认为这是闭包的定义,而另一个定义是针对一流函数的,但苹果似乎将它们放在一起并称之为闭包。

我误解了什么吗?还是苹果调用闭包和一流的函数闭包?

我已经编写了这个示例代码,只是想知道我在书面评论中是否正确?

0 投票
2 回答
47 浏览

compilation - 编译器如何决定是否需要传递 self ?

我正在研究一种基于新类的动态类型编程语言,其中函数是一流的对象。在类中定义的函数(也称为方法)称为传递self作为第一个参数,而全局定义的函数不需要具有 self 参数。

在如下代码中:

编译器如何决定是否需要将self作为第一个参数传递给 p1(1234)?在这种情况下 p1 指向 foo 这是一个不需要self参数的全局函数。

0 投票
2 回答
708 浏览

ruby - Ruby 匿名类作为一等函数

Ruby 没有一流的功能;尽管它有 procs 和 lambdas,但众所周知,这些都需要大量开销。(Python 有一流的函数,显然没有开销。)我突然想到,可以通过使用匿名类来模拟一流的函数,如下所示:

有谁知道更好的方法?

0 投票
1 回答
73 浏览

scheme - 如何将函数复制到新符号?

我有一个关于 Common Lisp 中函数副本的问题。

在计划中,我会选择:

我如何使用 Common Lisp 做到这一点?

0 投票
3 回答
61 浏览

c++ - 如何将函数传递给模板化函数 A,该函数可能基于 A 的另一个参数具有不同的签名?

我想使用一种类型创建一个模板,并传递一个具有包含该类型的模板参数的函数。

这是我目前拥有的:

这行得通,但我觉得函数的调用者可能会有一些额外的冗长。理想情况下,我希望调用看起来像:

有没有办法简化对 Print 函数的调用?

0 投票
2 回答
137 浏览

python - 记录一流分配的功能

我有一个利用 Python 函数的一流特性定义的函数,如下所示:

要么我需要一种将文档字符串添加到按原样定义的函数的方法,要么使用更常见的格式实现相同的目的,以便我可以以正常方式编写文档字符串:

当函数被调用时起作用

但是我随后失去了调用方法的能力,例如

我猜这是因为函数在使用时变得更像一个类frompyfunc,从ufunc.

我想我可能需要定义一个类,而不是一个函数,但我不确定如何。我会同意的,因为这样我就可以像往常一样轻松添加文档字符串。

我标记了这个coding-style,因为原始方法有效,但不能轻易记录,如果标题不清楚,我很抱歉,我不知道描述这个的正确词汇。

0 投票
1 回答
149 浏览

c++ - C ++:将模板函数作为参数传递给其他模板函数时的模板参数推导

我有以下示例代码片段:

这个想法是有一个容器类,这里称为Box,我们可能希望通过将函数映射到其当前内容来创建该容器的新版本。

在这里试试

在创建 box3 的第 42 行,模板参数推导/替换失败:

尝试将模板函数(函数模板?)传递给本身需要模板参数参数的函数时,似乎就是这种情况。

到目前为止,我发现避免这种情况的唯一方法是将所有模板函数包装在 lambdas 或其他非模板函数中。这当然不是最理想的,因为它引入了很多样板。

为什么在这种情况下模板参数推导失败,有没有办法改变Box类(和/或其transform成员函数)的代码以确保模板参数推导有效

(给定的代码是 C++11,因为 repl.it 还不支持 c++14。C++14 的主要区别是transform可以省略尾随返回类型。但是,错误仍然相同. 我对(仅)也适用于 C++14 的解决方案感到满意。)

0 投票
1 回答
117 浏览

f# - 通过默认编程实现 F# 接口

隐性编程的一个想法是,如果可以避免的话,不要将参数应用于函数。

如果函数是一等成员,为什么 F# 不允许它编译?

我得到编译错误...

未找到与此覆盖对应的抽象属性

我觉得这应该编译。adder.Add明确实施IAdder.Add并且应该是可以接受的。

0 投票
4 回答
186 浏览

javascript - 函数局部变量中 Javascript 范围的总和

我有范围函数和输出函数它们工作正常,现在我想创建 sum 函数用作范围函数中的 callbac 函数,但是当某些函数执行局部变量时让我们说总或总和初始化 0(零),如何解决这个问题?