相关疑难解决方法(0)

实现函数式编程中的多态性

我目前正在享受从面向对象语言到功能语言的过渡.这是一股清新的空气,我发现自己比以前更富有成效.

但是 - 有一个方面的OOP我还没有在FP方面看到一个令人满意的答案,那就是多态性.即我有大量的数据项,当它们被传递到某些函数时需要以完全不同的方式处理.为了论证,让我们说有多种因素推动多态行为,因此潜在地指数多种不同的行为组合.

在OOP中,可以使用多态性相对较好地处理:通过组合+继承或基于原型的方法.

在FP中我有点卡在:

  • 通过分支每个数据项的值来编写或编写有效实现多态行为的纯函数 - 感觉就像组装一个巨大的条件甚至模拟虚拟方法表!
  • 将函数以类似原型的方式放在纯数据结构中 - 这看起来似乎有效,但是它是否也违反了将数据与数据分开定义的想法?

对于这种情况,推荐的功能方法是什么?还有其他好的选择吗?

language-agnostic oop polymorphism functional-programming prototype

50
推荐指数
4
解决办法
7240
查看次数

"dyn"在一个类型中意味着什么?

我最近看到使用dyn关键字的代码:

fn foo(arg: &dyn Display) {}

fn bar() -> Box<dyn Display> {}
Run Code Online (Sandbox Code Playgroud)

这个语法是什么意思?

syntax rust

41
推荐指数
3
解决办法
2788
查看次数

C ++的概念和Rust的特征之间有什么异同?

在Rust中,抽象的主要工具是traits。在C ++中,有两种用于抽象的工具:抽象类和模板。为了摆脱一些使用模板的缺点(例如,硬盘读取错误消息),C ++引入的概念,这是“命名集的要求”

这两个功能似乎非常相似:

  • 定义特征/概念是通过列出要求来完成的。
  • 两者都可以用于绑定/限制通用/模板类型参数。
  • Rust特征和带有概念的C ++模板都是单态化的(我知道Rust特征也可以用于动态调度,但这是另外一回事了)。

但据我了解,也存在显着差异。例如,C ++的概念似乎定义了一组必须有效的表达式,而不是列出函数签名。但是那里有很多不同且令人困惑的信息(也许是因为概念仅出现在C ++ 20中?)。这就是为什么我想知道:C ++概念和Rust的特性之间的区别和相似之处到底是什么?

是否存在仅概念或特征提供的功能?例如,Rust的关联类型和const如何?还是用多个特征/概念来界定一个类型?

c++ traits rust c++-concepts

37
推荐指数
1
解决办法
1425
查看次数

Rust特性是否类似于JavaScript mixins?

锈病书(第二版)认为,“特征类似于一个经常在其他语言中称为‘接口’功能,但有一些不同。” 对于那些不熟悉界面的人来说,这个比喻无法说明。是否可以将特征合理地认为是混合类(例如JavaScript中常见的混合类)?

两者似乎都是共享代码并向多个类型/对象添加方法而无需继承的一种方法,但是这些区别对于概念性理解有多重要?

rust

3
推荐指数
2
解决办法
833
查看次数