- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在学习一些多态性。
rust 地址 trait
的 wiki 页面是 method to achieve ad hoc polymorphism ,以及 ad hoc polymorphism 的页面说函数重载
是特别多态性的一个例子。
根据我目前的理解水平,如果提供不同类型的参数将调用不同的实现,则函数是临时多态的。但是 trait
和 function overloading
看起来很不一样:trait
添加了对类型参数的约束,任何类型实现了 trait
是可接受,虽然函数重载对具体类型进行重载,但任何未重载的类型都是 Not Acceptable 。
我可以说 trait
和 function overloading
在相反的方向上实现了临时多态性吗?由于 trait
是通过特化而 overloading
是通过泛化?
PS:在c++中,模板特化也可以根据传入的类型参数提供不同的实现,这也是ad hoc多态性的一个例子吗?
最佳答案
实现特征涉及提供行为的实现,它是特定于类型的并且与其他实现(“临时”)分开,并且可以在调用站点以与其他实现相同的拼写调用(“多态”)。它与函数重载的方向相同。
在 C++ 中,您可以提供重载来实现临时多态性:
void foo(const X&) { ... }
void foo(const Y&) { ... }
// can call foo(z) where z is an X or a Y
你可以用 Rust 中的特征做同样的事情:
trait Foo { fn foo(); }
impl Foo for X { ... }
impl Foo for Y { ... }
// can call z.foo() where z is an X or a Y
我认为您指的“另一个方向”是能够通过类型支持的行为来限制泛型。在 Rust 中,这看起来像:
fn bar<T: Foo>(t: T) { ... }
// bar can use t.foo()
C++ 有一个类比:
template<typename T> concept Foo = requires(T t) { foo(t); };
void bar(Foo auto& t) { ... }
// bar can use foo(t)
// (this uses really new C++, it's written differently in older C++)
受约束的泛型函数不是特别的多态性,因为它们有一个适用于所有参数类型的实现,这些参数类型实现了对它们的任何要求。
总而言之,traits 为通用函数提供了特殊的多态性和约束,一些语言(如 C++)使用不同的设备来实现相同的目的。 C++ 中的临时多态性通常通过函数重载来实现。模板特化也可以实现。
关于rust - 这个理解对吗: trait and function overloading both achieved ad hoc polymorphism but in different direction,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63221632/
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: How do short URLs services work? 我经常看到来自 bitly.com 的缩短
我编写了一个简单的游戏,并希望将 GameCenter Achievements 与其集成。 我想尝试以一种干净整洁的方式来做到这一点,这样很容易添加额外的成就。 在我看来,成就包含以下内容: 触发器
我在 Dribble 中发现了一些 Appbar 设计 https://dribbble.com/shots/9175650-Beauty-Salon-App/attachments/1218583?
我有这样的东西。 function a() { ajax(callback_function); } callback_function() { // done!, called after
我有三列布局。在第三列中,我有两个 div。第一个 div 是固定的。第二个 div 的最小高度为 50px。当第二个 div 中的文本内容增加时,它的高度应该增加到到达第三列底部的点,然后它应该显示
我正在尝试分析/分析核心 JAVA 应用程序。 我正在使用 JConsole Eclipse MAT 。 我在 Perm-Gen 图表中观察到以下情况(在 Windows XP 计算机上记录的 1 小
我有一个按钮附加到父按钮: var parent_button = document.createElement("button"); var child_button = document.crea
在 jquery 中的 div 之间链接动态事件的最佳方法是什么。 我的 HTML 页面: 对于每个点击的 parent ,我想切换它的 child Example :: if p
上下文: 我在阅读 Pomakis 的哈希表实现时出现了一个问题。 Hash lookup 我经常使用 Startpage 来查找更多信息,但仍然一头雾水。 问题: 因为它使用链表来检索 key ,怎
我在想什么 InstrumentationInfo#functionalTest应该实现。对应用环境的启动方式有影响吗? 最佳答案 我在 Android 问题跟踪器上问了这个问题(不幸的是我再也找不到
模偏差是天真地使用模运算来获得小于给定“上限”的伪随机数时出现的问题。 因此,作为一名 C 程序员,我正在使用 arc4random_uniform() 函数的修改版本来生成均匀分布的伪随机数。 问题
我有一个 3 节点 Cassandra 集群,其 key 空间的复制因子为 3: CREATE KEYSPACE demo WITH REPLICATION = { 'class':'Si
元素 tasklist最多可以包含一个 title最多一个 description ,另外任何数字(包括 0)task任何顺序的元素。 天真的方法不适用,因为顺序无关紧要: 或者,我可以明确命名所有
目前,我使用 Azure 服务总线作为平台中不同服务之间的通信和保持数据一致性的手段。但是,假设我的一项服务(订阅者)长时间停机并且无法接收任何事件。突然间,该服务处于不一致的状态。 Azure 服务
我有以下字典: res = [{'name': 'mfi', 'percentage': 100.0, 'tax_base': 1000.0, 'tax_amount': 140.0}, {'name
我有以下字典: res = [{'name': 'mfi', 'percentage': 100.0, 'tax_base': 1000.0, 'tax_amount': 140.0}, {'name
我有两个文件。我正在尝试查找与特定人相关的所有论文。文档保存在它们的集合中,并且正在创建从 Person 到 Paper 的引用,但不是相反。 /** @ODM\Document */ class P
请问有人可以帮我解决 jquery Slider 范围问题吗?我是 jQuery 新手,试图在左/右拖动范围内实现 min(右箭头图标)和 max(左箭头图标)。 价格范围:0 - 1000==(>)
//lets get the auto name set $accepted = 0; $sql = mysql_query("SELECT * FROM ".TBL_FACTIONS." WHERE
我目前正在尝试将大量 XML 更改为 Java 对象,但我一直陷入困境。我尝试过在线复制很多不同的示例,但我似乎永远无法找到正确的方法,而且我发现调试起来非常困难。 我的 XML 看起来像这样
我是一名优秀的程序员,十分优秀!