F#是否具有行多态性(或类似的东西?)

wyer33

F#是否具有行多态性或类似的东西?具体来说,在OCaml中,我们可以编写如下函数

# let foo x = x#num+2;;
val foo : < num : int; .. > -> int = <fun>

基本上,该函数foo可以接受任何包含numtype方法对象int我不确定如何在F#中执行类似的操作。如果可能,我想避免通过继承进行显式子类型化。具体来说,我不是在寻找这样的东西:

[<AutoOpen>]
module Foo

[<AbstractClass>]
type foo() =
    abstract member num : int

type foo1() =
    inherit foo()
    override this.num = 2
    member this.char = 'a'

type foo2() =
    inherit foo()
    override this.num = 3
    member this.string = "abbacadabba"

let f (x:foo) = x.num + 2

其原因是,即使我们可以使用类型的对象foo1foo2内部f,我们无法访问他们的其他成员,charstring分别。为了重新获得此信息,我们必须采取双重调度技巧,例如使用访客模式,而我正努力避免这种情况。基本上,我正在尝试获得诸如行多态性之类的东西,而不是子类型化。

罗伯特·杰普森

这是一种实现方法:

let inline foo (a: ^a) = 
    let x = (^a : (member num: int) (a))
    x + 2

type monkey() =
    member x.num = 2
type pig() =
    member x.num = 3

let x = monkey()
let y = pig()

foo x // = 2+2=4
foo y // = 3+2=5

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

F#是否具有行多态性(或类似的东西?)

来自分类Dev

MSBuild是否具有OnImport回调或类似的东西来检测导入?

来自分类Dev

DNN是否具有与Drupal中的View或Wordpress中的ACF类似的东西?

来自分类Dev

MSBuild是否具有OnImport回调或类似的东西来检测导入?

来自分类Dev

具有可选IBOutlet的属性多态性

来自分类Dev

具有多态性的C ++复制指针的向量

来自分类Dev

使用具有多态性的通用接口

来自分类Dev

接口为类型的数组(具有接口的多态性)

来自分类Dev

具有final或模板的静态多态性?

来自分类Dev

C ++:运算符=具有多态性的重载

来自分类Dev

接口为类型的数组(具有接口的多态性)

来自分类Dev

具有多态性的C#泛型

来自分类Dev

Haskell 返回具有类限制的类型多态性

来自分类Dev

Rails 5 命名范围具有多态性,UndefinedColumn

来自分类Dev

具有不同模板类型的子类的多态性

来自分类Dev

是否有并发排序的字典或类似的东西?

来自分类Dev

Smalltalk中是否有+ =?还是类似的东西?

来自分类Dev

jQuery keyup,是否有keyleave或类似的东西?

来自分类Dev

NSUserDefaults / SharedPreferences是否在TypeScript中有任何类似的东西

来自分类Dev

如果对象具有多态性而不是多重继承,则虚拟指针在对象中的位置是否不同?

来自分类Dev

如果对象具有多态性而不是多重继承,则虚拟指针在对象中的位置是否不同?

来自分类Dev

C#到F#:功能性思维与多态性

来自分类Dev

Angle是否具有与ruby的模块mixin类似的概念?

来自分类Dev

javascript是否具有与php串联分配(。=)类似的功能?

来自分类Dev

Angle是否具有与ruby的模块mixin类似的概念?

来自分类Dev

GCC是否具有与pgcc的-Minfo = accel类似的参数?

来自分类Dev

C ++ std容器-没有指针的多态性。是否有可能?

来自分类Dev

在引导程序中有<hr>,是否有类似的东西,但对于垂直分隔符?

来自分类Dev

具有种类*类的多态性的Haskell线性代数库

Related 相关文章

  1. 1

    F#是否具有行多态性(或类似的东西?)

  2. 2

    MSBuild是否具有OnImport回调或类似的东西来检测导入?

  3. 3

    DNN是否具有与Drupal中的View或Wordpress中的ACF类似的东西?

  4. 4

    MSBuild是否具有OnImport回调或类似的东西来检测导入?

  5. 5

    具有可选IBOutlet的属性多态性

  6. 6

    具有多态性的C ++复制指针的向量

  7. 7

    使用具有多态性的通用接口

  8. 8

    接口为类型的数组(具有接口的多态性)

  9. 9

    具有final或模板的静态多态性?

  10. 10

    C ++:运算符=具有多态性的重载

  11. 11

    接口为类型的数组(具有接口的多态性)

  12. 12

    具有多态性的C#泛型

  13. 13

    Haskell 返回具有类限制的类型多态性

  14. 14

    Rails 5 命名范围具有多态性,UndefinedColumn

  15. 15

    具有不同模板类型的子类的多态性

  16. 16

    是否有并发排序的字典或类似的东西?

  17. 17

    Smalltalk中是否有+ =?还是类似的东西?

  18. 18

    jQuery keyup,是否有keyleave或类似的东西?

  19. 19

    NSUserDefaults / SharedPreferences是否在TypeScript中有任何类似的东西

  20. 20

    如果对象具有多态性而不是多重继承,则虚拟指针在对象中的位置是否不同?

  21. 21

    如果对象具有多态性而不是多重继承,则虚拟指针在对象中的位置是否不同?

  22. 22

    C#到F#:功能性思维与多态性

  23. 23

    Angle是否具有与ruby的模块mixin类似的概念?

  24. 24

    javascript是否具有与php串联分配(。=)类似的功能?

  25. 25

    Angle是否具有与ruby的模块mixin类似的概念?

  26. 26

    GCC是否具有与pgcc的-Minfo = accel类似的参数?

  27. 27

    C ++ std容器-没有指针的多态性。是否有可能?

  28. 28

    在引导程序中有<hr>,是否有类似的东西,但对于垂直分隔符?

  29. 29

    具有种类*类的多态性的Haskell线性代数库

热门标签

归档