gpt4 book ai didi

scala - 如何声明单一方法特征

转载 作者:行者123 更新时间:2023-12-03 21:30:03 25 4
gpt4 key购买 nike

在scala中,有多种方法可以只用一种方法来声明一个特征

trait OneMethod extends (A => B)

trait OneMethod {
def myMethod(a: A) : B
}

每种解决方案的优缺点是什么?

最佳答案

通过扩展 (A => B),您是说 OneMethod 是一个函数,可以直接使用:

trait TraitA extends (Int => String)
class ClassA extends TraitA { def apply(i: Int) = i.toString }

val a = new ClassA
(1 to 5).map(a) // IndexedSeq[String] = Vector(1, 2, 3, 4, 5)

如果你不扩展(A => B),你就不能这样做;相反,您必须明确地告诉它方法名称是什么:

trait TraitB { def myMethod(i: Int): String }
class ClassB extends TraitB { def myMethod(i: Int) = i.toString }

val b = new ClassB
(1 to 5).map(b) // error, required: Int => ?
(1 to 5).map(b.myMethod) // IndexedSeq[String] = Vector(1, 2, 3, 4, 5)

所以:扩展 (A => B) 可以让你的类在使用上更灵活一点,而且不那么冗长。另一方面,如果您想要一个比 apply 更具描述性的名称,您可以使用版本 B。

同样值得注意的是:两个版本都没有将 trait 限制为只有一种方法;您可以向其中任何一个添加额外的方法。

关于scala - 如何声明单一方法特征,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29019466/

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