scala - 当参数是对象类型时,如何在 F# 中要求多个接口(interface)?

标签 scala f#

在 scala 中,我可以要求这样的多个特征:

def foo(bar: Foo with Bar): Unit = {
  // code
}

这在 F# 中是否也可以,或者我必须明确声明 FooBar继承 Foo 的接口(interface)和 Bar ?

最佳答案

您可以通过使用泛型类型'T 来指定它。带有限制 'T 的约束到实现所需接口(interface)的类型。

例如,给定以下两个接口(interface):

type IFoo = 
  abstract Foo : int 
type IBar = 
  abstract Bar : int 

我可以编写一个需要 'T 的函数这是IFoo还有IBar :
let foo<'T when 'T :> IFoo and 'T :> IBar> (foobar:'T) = 
  foobar.Bar + foobar.Foo

现在我可以创建一个实现这两个接口(interface)的具体类并将它传递给我的foo。功能:
type A() = 
  interface IFoo with 
    member x.Foo = 10
  interface IBar with 
    member x.Bar = 15

foo (A()) // Type checks and returns 25 

关于scala - 当参数是对象类型时,如何在 F# 中要求多个接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56687023/

相关文章:

winforms - 使用反射来确定对象是否需要在 GUI 线程上调用其成员

scala - 为什么 onComplete 不等待 Scala 代码中的 Promise.success?

algorithm - 有没有办法对分区的 spark 数据集并行运行操作?

f# - F# 函数的多个退出

multithreading - 如何并行化对称worker?

f# - 如何在 SqlTransaction 中使用 "use"绑定(bind)

f# - F# 中 "do!"符号的目的是什么?

java - 从 Scala 方法到 Java 的返回类型

scala - Scala在没有var的actor中保持状态

multithreading - 这种死锁在 Scala Future 中是如何发生的?