问题标签 [function-signature]

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

javascript - Tap的函数签名(K-combinator)

我在一本书中读过,点击函数(也称为K-Combinator)的函数签名如下:

“这个函数接受一个输入对象 a 和一个对 a 执行某些操作的函数。它使用提供的对象运行给定的函数,然后返回该对象。”

  1. 有人可以帮我解释函数签名中星号(*)的含义吗?
  2. 下面的实现是否正确?
  3. 如果这三种实现都正确,那么什么时候应该使用哪一种?有什么例子吗?

实施1:

实施2:

实施3:

0 投票
1 回答
124 浏览

function - 在 Haskell 中,您能否拥有调用其他函数但没有实现的函数的签名?

所以我正在学习 Haskell,我必须实现一个 treeunzip 函数,该函数采用类型为 (Tree (a,b)) 的树,其中“a”和“b”是整数,并返回解压缩的两棵树的列表,即是(树 a,树 b)。

我可以得到两棵树中的一棵,但我不能将它们放在一个列表中。我想出的是:

新树定义为:

树定义为:

这是treeunzipL和treeunzipR函数,我不知道是否重要。

现在加载模块时显然给我一个错误,因为 treeunzip 有签名但没有实现。有没有办法解决这个问题?

谢谢你。

0 投票
2 回答
118 浏览

python - 创建一个结合两个函数而不指定原始函数的调用签名的装饰器

我想创建一个装饰器,它结合了两个函数并结合了它们签名中的参数。

我想要的界面:

这基本上应该导致:

我想要这个的原因是因为我真的不知道函数的参数f(我知道它们,但我不想再次输入它们以使其通用。)

我不确定我是否必须g*argsand打电话**kwargs,但我认为这是必要的。

这是我走了多远:

这会产生所需的调用签名g,但它不起作用。

编辑,因为询问了错误消息

例如:g(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1)

如果我随后按照错误消息给出 14 个参数g(1,1,1,1,1,1,1,1,1,1,1,1,1,1)

很明显,我的实现并没有真正起作用。

0 投票
0 回答
823 浏览

python - 使用 functools.partial 将其设置为一个值后删除函数参数

我想使用functools.partial将某个参数设置为常量,同时完全删除该参数。

让我用一个简单的例子来解释它。

但是,此函数g仍然具有以下调用签名:

我当然可以使用 lambda 函数来做到这一点,例如:

具有正确的调用签名:

使用lamdba函数的缺点是我需要再次写下所有参数。在我的简单示例中,这无关紧要,但看看这个:

为什么我还要这个?

稍后在我的代码中,我使用了可以通过将其他两个函数相乘来生成新函数的包装器,例如combine(function1, function2, operator.mul). 此combine函数查看所有参数,因此我需要在设置后删除参数。

0 投票
1 回答
932 浏览

php - PHP 类型提示被忽略,没有抛出 TypeError 异常

我刚刚调试了一些 PHP 7.1 代码,我忘记删除(bool)返回值的强制转换,但该函数声明的返回类型为int

在这里测试代码。

当然,在booland之间很容易转换,但是为什么不抛出TypeError呢?int

在三种情况下可能会抛出 TypeError。...第二个是从函数返回的值与声明的函数返回类型不匹配的地方。

类型化的函数参数表现出相同的行为。

0 投票
0 回答
255 浏览

typescript - TypeScript 函数参数签名 - 允许箭头函数,禁止类方法

假设我有一个包含其他库的类:

而这个使用它:

里面的两个调用都B.do()编译,但第一个在运行时失败,因为this它尝试调用时丢失了上下文doLater()。可以理解。我对此无能为力,但我希望能够编写A.method()签名,以便您被迫在调用站点使用箭头函数,因为我无法修改库代码。那可能吗?

我正在使用 TypeScript 2.5.2 并--noImplicitThis已启用

0 投票
0 回答
1436 浏览

typescript - Typescript:函数参数签名的通用类型

我尝试声明一个类型,该类型定义函数类型的转换,生成具有相同参数但另一个返回类型的类型。
目标是编写一个函数createAction,它期望一个函数并返回一个新函数,该函数期望与给定的参数相同但返回另一种类型。

输入:函数需要一个字符串和一个数字,返回类型R

期望的类型g是:函数期望一个字符串和一个数字,返回类型{ payload: R }

这将允许我编写另一个createActions期望函数映射并返回相同映射但具有转换函数的函数:

我可以创建具有不同数量的泛型参数的类型重载以涵盖许多不同的函数签名(见下文),但我正在寻找一种更通用的解决方案,它允许自动推断给定函数的参数编号和类型。使用类型重载会使上述函数映射无法实现。

通过硬编码参数数量使用泛型的基本解决方案:

谢谢您的帮助!

0 投票
2 回答
298 浏览

python - PyCharm:这种自动签名重构可能吗?

一个项目的 Python 代码有很多函数定义和调用,例如:

这很麻烦(不好的做法 - 缺少上下文等),我想自动将其更改为:

(好吧,在某些情况下,第一个位置参数可能会保持不变)

很多情况下,关键字参数的顺序是不同的,所以也可以按照函数定义的顺序来排列:

PyCharm 的 Refactor > Change 签名有什么帮助吗?

好吧,PyCharm 会重新排序 kw 参数,但不会将位置参数更改为关键字参数(在调用中)。它只是当前的限制还是我错过了一些自动完成的方法?

0 投票
2 回答
1366 浏览

c++ - 派生类不会覆盖具有不同签名的虚函数

我有一个派生类,我希望其中一个函数在基类中覆盖其版本,但具有不同的签名。简单的例子:

即使 A 被分配为派生类,上面的代码也会调用基类副本:

因为(据我的理解)参数可以转换为匹配基类签名,并且派生类不会因为这种差异而覆盖它(但在这种情况下它不会隐藏它吗?)。如果我将基类函数也更改为具有short参数,则派生类确实设法覆盖它。

有没有一种简单的方法来说服调用基于指针使用正确的函数?我可以像这样添加另一个函数:

但是我会一直转换参数(short->double->short),这个函数对性能至关重要。有没有更好的办法?

0 投票
2 回答
123 浏览

php - 传递默认值而不是引用

我有这样的功能(使用 PHP 7.1):

我想要实现的是传递 null 作为第一个参数并传递一些东西作为第二个参数:

当我这样做时,我得到“只有变量可以通过引用传递”错误。

但是当然,null 是第一个参数的默认值,因此该函数被设计为将 null 作为第一个参数处理。

有没有办法做到这一点?