gpt4 book ai didi

Scala:从特征实例化时使用 def 还是 val?

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

我正在阅读 Chiusano 和 Bjarnason 所著的 Scala 函数式编程

在第 10 章中,他们定义了 Monoid 特征:

trait Monoid[A] {
def op(a1: A, a2: A): A
def zero: A
}

该特征的两个示例实例如下:

1) 字符串 幺半群:

val stringMonoid = new Monoid[String] {
def op(a1: String, a2: String) = a1 + a2
val zero = ""
}

2) 列表幺半群:

def listMonoid[A] = new Monoid[List[A]] {
def op(a1: List[A], a2: List[A]) = a1 ++ a2
val zero = Nil
}

我的问题是,为什么我们在 stringMonoid 中使用 val,而在 listMonoid 中使用 def

最佳答案

stringMonoid 是字符串类型 new Monoid[String]

listMonoid 是一个泛型类型new Monoid[List[A]]。为了传递这个泛型类型 A,它被声明为 def

def listMonoid[A] = new Monoid[List[A]]

编辑

解决评论:

如果您仍然想要对 listMonoid 使用 val,请定义其中包含的列表。

val listMonoid = new Monoid[List[Int]] {
def op(a1: List[Int], a2: List[Int]) = a1 ++ a2
def zero = List.empty
}

关于Scala:从特征实例化时使用 def 还是 val?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53455517/

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