gpt4 book ai didi

Scala 函数式接口(interface)特征

转载 作者:行者123 更新时间:2023-12-02 10:36:15 25 4
gpt4 key购买 nike

我有一个特点:

trait MyTrait extends (Int => MyTrait)

如何将扩展中的 MyTrait 限制为 MyTrait 的任何实现?

最佳答案

在 scala 中,Function 类型是协变的,如 Function1 签名中的 +R 所示:

特征 Function1[-T1, +R] 扩展 AnyRef

这意味着您所拥有的已经是正确的。让 MyTrait 扩展 (Int => MyTrait) (与 Function1[Int, MyTrait 相同)意味着任何扩展 MyTrait 的类型都会必须实现一个 apply 函数,该函数返回 MyTrait 的任何实例。

根据您当前的 MyTrait 签名,以下内容都是合法的:

class Foo extends MyTrait {
def apply(x: Int): Foo = new Foo
}

class Bar extends MyTrait {
def apply(x: Int): Foo = new Foo
}

class Baz extends MyTrait {
def apply(x: Int): MyTrait = new MyTrait { def apply(y: Int) = new Baz }
}

关于Scala 函数式接口(interface)特征,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30329425/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com