问题标签 [parametric-polymorphism]

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 投票
8 回答
20620 浏览

c++ - 多态性和重载的区别

我发现关于多态性和重载有很多定义。有人说重载是多态的一种。虽然有些人说他们不一样。因为重载时只会分配一个函数。而多态性需要为每个重新定义的成员函数分配内存。我真的对此感到困惑,任何人都可以为我解释一下吗?此外,重载是否发生在编译时,而多态性发生在运行时?

0 投票
1 回答
84 浏览

c# - 可以在 WCF 服务中处理不可预测的类型化参数吗?

我对 WCF 服务比较陌生,所以如果我遗漏了明显的内容,我提前道歉。我的企业使用 EasyPost 作为我们的运输解决方案,我编写了一个 WCF 服务来处理来自 EasyPost 的运输状态 webhook 调用,如下所述: https ://www.easypost.com/docs/webhooks

简而言之,EasyPost 通过 POST 将更新对象作为 JSON 发送。问题是它向同一个服务方法发送了几种不同类型的(不可配置的)更新,我发现很难编写一个包含所有可能性的 DataContract。例如,如果它发送的参数是一个跟踪号更新,那么update.result.status将是一个字符串值;如果是批量状态更新,update.result.status将是一个对象。这有点乱。

我尝试仅处理我关心的更新类型并在其他更新类型上返回 400 状态代码,但 EasyPost 将其解释为中断并将我的服务作为 webhook 端点丢弃。

从我读到的内容来看,我似乎可以放弃数据协定的舒适性,转而使用System.ServiceModel.Channels.Message参数作为包罗万象的内容,然后手动解析消息。不过,这并不是一个明智/干净的解决方案。

我会很感激任何替代方案。

0 投票
1 回答
264 浏览

haskell - 通过 Haskell 中的多态性递归代数数据类型

考虑到通用多态性的功能,我试图理解递归代数数据类型的定义、去和编码。例如,我尝试通过实现递归类型的二叉树

直觉是二叉树的类型应该在所有T配备常量e: T和二元运算的类型中是初始的m: T -> T -> T,即函子上的“初始模块” BTAlg。换句话说,元素 ofBT是为任何此类模块分配 的元素的一种T方式T

自身的模块结构BT可以通过

作为BT对. x:BT_ BT_x

但是,此代码导致我无法处理的类型错误:

这里有什么问题?我不知道为什么类型检查器不承认通用类型参数z必须专门化才能适用BT于;写作也无济于事。xxinitial_module(x :: ((BTAlg BT) -> BT) -> BT) initial_module

关于定义动机的附录decode_encode我想说服自己BT实际上与标准实现“同构”

二叉树;虽然我不知道如何在 Haskell 中做到这一点,但首先要构建映射BT -> BTStdBTStd -> BT在两种实现之间来回切换。

的定义是对规范模块结构toStandard: BT -> BTStd的通用属性的应用:BTBTAlgBTStd

对于解码功能fromStandard: BTStd -> BT,我想做以下事情:

但是,这会产生与上述直接定义相同的打字问题decode_encode

谢谢!

0 投票
1 回答
146 浏览

monads - 粘合剂下的一元替换

在下面的 Agda 代码中,我有一个基于 de Bruijn 索引的术语语言。我可以以通常的 de Bruijn 索引方式定义对术语的替换,使用重命名以允许替换在活页夹下进行。

我现在想做的是将类型泛化Term为多态变体,这样我就可以定义一个单子〉〉=操作并使用它来表达替换。这是天真的尝试:

这里的问题是我不再知道如何定义extend(这将替换转换为更深的上下文),因为替换是一个更抽象的野兽。

根据Bernardy 和 Pouillard的论文Names for Free ,这里有更接近的内容:

The idea here is to model the idea of context extension in an explicitly abstract way, allowing extend to be defined for renamings and substitutions even in the polymorphic setting.

Unfortunately, I seem to be too stupid to understand how to extend this approach so that terms are parameterised by a Type, as they are in my first attempt above. I would like to end up with 〉〉= having (approximately) the following type:

Can anyone point me in the right direction?

0 投票
1 回答
4100 浏览

ocaml - OCaml 中的“约束”关键字可以做什么

OCaml 手册描述了可以在类型定义中使用的“约束”关键字。但是,我无法弄清楚可以使用此关键字完成的任何用法。这个关键字什么时候有用?可以用来去除多态类型变量吗?(因此type 'a t模块中的 a 变得公正t,并且该模块可以在t不需要变量的函子参数中使用。)

0 投票
1 回答
221 浏览

javascript - javascript中的多级多态,多态Object.extend

我想实现多级继承,支持通过在被扩展对象上执行的扩展方法实现的多态性(而不是通过外部实用程序或函数 - 从被扩展对象的角度来看)。

tl; jsfiddle 博士在这里:http: //jsfiddle.net/arzo/VLkF7/

我想要的是?

上面的代码有什么问题?如果这是常规的,例如 C++ 继承,则 DragNDrop 将具有undo方法,但它没有,因为var objs=[this, objectToBeMerged]仅将 this 评估为MyObj,但我希望将其评估为扩展的任何对象被执行(所以在执行 ActionObj.extend 的情况下,我想在函数扩展中将关键字this评估为ActionObj,而不是MyObj

此问题的解决方案可能是使用 jQuery.extend 的 _.extend,如下所示:

但上述解决方案需要使用外部工具 -MyUtils在这种情况下,这不是真正的多态解决方案

您知道如何强制 MyObj.extend 在运行时评估(而不是何时定义评估)this表达式上进行迭代吗?

0 投票
3 回答
268 浏览

haskell - 在 Haskell 中是否有一种自动记忆全局多态值的方法?

多态“常量”,例如5 :: Num a => a,并不是真正的常量,而是字典参数的函数。因此,如果你定义

当然,不好的例子,这里没有充分的理由让它多态......我真正感兴趣的是,如果你尝试全局记忆一个非平凡的多态函数,例如memo-tries。
那么这个序列将不会在来自不同站点的调用之间共享,这在性能方面并不好。(这难道不是 Haskell 标准赋予我们可怕的单态性限制的主要原因吗?)

我可以看到如何强制共享的唯一方法是为约束类的每个实例设置一个单态“标签”。例如

......这在优雅方面并不好。

有没有更好的方法来实现这样的记忆?

0 投票
3 回答
531 浏览

haskell - 为什么此功能无法进行类型检查?

在关于函数式编程的讲座中,我们看到了以下 Haskell 函数:

预计此功能将无法进行类型检查。但是,没有解释发生这种情况的原因。在 GHCI 中尝试时,我得到以下输出:

为什么会这样?

0 投票
1 回答
3166 浏览

casting - 如何转换我知道是整数的泛型类型?

我想以通用方式检查 C API 的返回码,结果必须不含 C 类型,例如libc::c_int. 有没有办法写一个像

当我确定S并且T是所有用法的整数类型时check()?编译器拒绝我的代码抱怨error: non-scalar cast: `S` as `T`

0 投票
1 回答
278 浏览

uml - 在 UML 类图中表达参数多态性和高阶函数

是否可以在 UML 类图中表达参数多态性(C# 中的泛型类型)或高阶函数?

如果是,这是如何完成的?

如果没有,是否还有其他图表类型更适合描述包含所列功能的程序架构?

背景:我想在一篇论文中描述一个用 Scala 编写的 API。