【发布时间】:2019-02-16 02:34:02
【问题描述】:
我正在学习使用 Scala 猫库。我经常看到这种类型的定义,例如
implicit def validatedApplicative[E : Semigroup]: Applicative[Validated[E, ?]] = ???
def parallelValidate[E : Semigroup, A, B, C](v1: Validated[E, A], v2: Validated[E, B])(f: (A, B) => C): Validated[E, C] = ???
def parse[A : Read](key: String): Validated[ConfigError, A] = ???
谁能告诉我为什么我们在
[A : ClassName]的泛型中定义A类型为ClassName?-
当我们将方法定义写成
时,我们会得到什么额外的好处def parse[A : Read](key: String): Validated[ConfigError, A]而不是
def parse(key: String): Validated[ConfigError, Read]对于方法声明?
【问题讨论】:
-
我认为您对 [T: Type] 语法的理解有误。这是一个上下文绑定。 def foo[A: Read](a: A) 等价于 def foo[A](a: A)(implicit ev: Read[A])。它的意思是“这是某个 A,它的隐式 Read[A] 实例存在于范围内的某处”
-
感谢您澄清这个疑问。
标签: scala scala-cats