问题标签 [functor]

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

java - .NET Action 的 Java 等效项和功能, ETC

Java 中是否有任何标准的通用“回调”或“函数/方法”类型,例如.NETSystem.Action<T>System.Func<T,U>.NET?

在我的具体情况下,我需要一个类来包装一个方法,该方法采用一个(通用)类型参数T并且不返回任何内容(即void)。

是的,为自己创建这样一个类/接口很容易,但如果有一个标准库类,我更喜欢它。

0 投票
3 回答
3678 浏览

haskell - 所有 Haskell 函子都是内函子吗?

我有点困惑,需要有人来纠正我。让我们概述一下我目前的理解:

内函子在哪里EA是某个类别:

既然 Haskell 中的所有类型和态射都在Hask范畴内,那么 Haskell 中的任何函子不也是endofunctor吗?F : Hask -> Hask.

我有一种很好的感觉,我错了,并且以某种方式过度简化了这一点,我希望有人告诉我我是多么的白痴。谢谢。

0 投票
2 回答
1475 浏览

module - 理解 OCaml 中的函子

我对 OCaml 中的以下仿函数问题非常困扰。我粘贴一些代码只是为了让您理解。基本上

我在以下位置定义了这两个模块pctl.ml

和以下函子:

然后为了实际使用这些模块,我直接在一个名为的文件中定义了一个新模块prism.ml

从第三个来源( )我使用了带有模块formulas.ml的函子:Prism

最后从main.ml

并编译给出以下错误

错误:此表达式的类型为 Prism.state = Prism.value 数组,但表达式应为 Formulas.PrismPctl.s 类型

据我所知,名称有一种不好的别名,它们是相同的(因为value array类型定义为t并且M with type s = P.t在仿函数中使用)但类型检查器不认为它们相同。

我真的不明白问题出在哪里,有人可以帮助我吗?

提前致谢

0 投票
1 回答
1601 浏览

c++ - C++ Templated Functor(基于现代 C++ 设计)编译错误

基于“现代 C++ 设计”一书的第 5 章(广义函子)

我正在尝试编写一个 Functor 模板。在问我“为什么我不直接使用 Boost 的 bind 或 Loki ?”之前 简单的答案是“因为我想学习”。

话虽这么说,我已经按照这本书,也使用了示例代码作为参考,但我不断地提出编译时错误,我似乎无法理解为什么。

当我修改本书的示例代码以不使用线程模型时,示例工作正常。但我的代码没有。以下是相关代码:

很基础的TypeList,还有TypeAt和Nulltype、EmptyType(也是根据书上的)

使用这些当然是 Functor

当我尝试这样使用它时:

我收到以下编译时错误:

有谁明白我为什么会看到这个问题?我没主意了。谢谢

0 投票
1 回答
1205 浏览

interface - 在 OCaml 中使用函子作为接口

我正在 OCaml 中开发一些算法,这些算法需要某些部分是“可插入的”,以便将部分计算留给特定的计算机。

举个例子,假设我有一个这样的签名:

和两个不同的实现将是Alg1Alg2。这个Algorithm模块应该代表各种实现的接口,比如这两个。

现在我需要另一个组件,我们称它为Executor使用Alg1Alg2通过其接口的模块..

阅读函子似乎我应该需要一个函子,它接受一个Algorithm并产生一个ConcreteExecutor我需要的算法的特定实现。所以这Executor是一种对其组件之一进行参数化的模块。

我对吗?这是获得我需要的最佳方式吗?我想知道这样的想法,因为我来自 Java/C++ 背景,所以我习惯于使用接口和抽象类,我需要以正确的方式解决这个函子/模块抽象问题。

获得我想要的东西的正确语法是什么?

提前致谢

0 投票
2 回答
4398 浏览

haskell - Haskell 中状态的 Functor / Applicative 实例

在阅读(并浏览了一些部分)Wadler 关于 monad 的论文之后,我决定更仔细地阅读这篇论文,为他描述的每个 monad 定义函子和应用实例。使用类型同义词

Wadler 用于定义状态 monad,我有以下内容(使用相关名称,以便稍后使用 newtype 声明定义它们)。

当我切换到在 newtype 声明中使用类型构造函数时,例如,

一切都崩溃了。一切都只是轻微的修改,例如,

然而,由于 lambda 表达式隐藏在该类型构造函数中,因此在 GHC 中没有任何运行。现在我看到的唯一解决方案是定义一个函数:

为了将 s 绑定到 'st' 并实际返回一个值,例如,

还有另一种不使用这些辅助功能的方法吗?

0 投票
1 回答
4188 浏览

module - OCaml 中具有多个参数的函子

我有以下情况:

这可以很好地生成类型模块,这些模块在其实现M中使用类型模块的特定实现。Something

现在假设我有另一个模块定义为

有各种实现

问题的关键是M模块现在应该在两件事上参数化:一个Something模块和一个AU模块,这样它就像

但我想有一个给定 aSomething和给定 a 的通用函子,AU它会产生一个模块,这两个东西都具体化了。有没有办法轻松获得?

由于函子语法很奇怪而且我还是新手,我不知道我所问的问题是否可以通过简单的方式解决。

提前致谢

0 投票
6 回答
257 浏览

c++ - 运算符重载问题

这段代码有什么问题?这段代码给了我很多语法错误。另外我想知道为什么在 C++ 中使用函子。

0 投票
2 回答
1093 浏览

c++ - 如何用函子定义向量

嘿,我实现了以下仿函数:

当我尝试将向量定义如下时,我遇到了很多错误:

在此先感谢您的帮助。

0 投票
3 回答
2985 浏览

c++ - 函子调用和函数调用的详细区别?

这样做的关键原因是 for_each () 实际上并没有假设 它的第三个参数是一个函数。它只是假设它的第三个参数是可以用适当的参数调用的东西。一个适当定义的对象和一个函数一样——而且通常比一个函数更好。例如,内联类的应用程序运算符比内联作为函数指针传递的函数更容易。因此,函数对象通常比普通函数执行得更快。具有应用运算符(第 11.9 节)的类的对象称为类函数对象、仿函数或简称为函数对象。

[Stroustrup,C++ 第 3 版,18.4-最后一段]

  1. 我一直认为operator()调用就像在运行时调用函数一样。它与普通的函数调用有何不同?

  2. 为什么内联应用程序运算符比普通函数更容易?

  3. 它们比函数调用快多少?