我读通过,并通过使用类型类工作我的方式,我对面的无形指南定义类型类的这种方式来:Scala的类型类的最佳实践
所以这里去的例子:
object CsvEncoder {
// "Summoner" method
def apply[A](implicit enc: CsvEncoder[A]): CsvEncoder[A] =
enc
// "Constructor" method
def instance[A](func: A => List[String]): CsvEncoder[A] =
new CsvEncoder[A] {
def encode(value: A): List[String] =
func(value)
}
// Globally visible type class instances
}
我不明白的是应用方法的需要?在这方面上面做了什么?
后来,指南介绍我怎么可以创建一个类型类的实例:
implicit val booleanEncoder: CsvEncoder[Boolean] =
new CsvEncoder[Boolean] {
def encode(b: Boolean): List[String] =
if(b) List("yes") else List("no")
}
实际上缩短为:
implicit val booleanEncoder: CsvEncoder[Boolean] =
instance(b => if(b) List("yes") else List("no"))
所以我现在的问题是,如何工作的呢?我没有得到的是应用方法的需要?
编辑:
- 定义类型类合同特质富:我碰到一个描述如下创建类型类的步骤的博客文章来了。
- 使用辅助方法定义伴随对象Foo,其作用类似于隐式方式,以及通常从函数定义Foo实例的方式。
- 定义定义一元运算符或二元运算符的FooOps类。
- 定义从Foo实例隐式提供FooOps的FooSyntax特征。
那么点数2,3和4的交易是什么?
请您详细说明创建类型类的这种做法吗?我现在编辑了我的问题! – sparkr