gpt4 book ai didi

scala - 隐式def和隐式val之间的区别是什么?

转载 作者:行者123 更新时间:2023-12-04 13:45:56 28 4
gpt4 key购买 nike

我有以下代码,我不知道有什么区别:

  implicit def boxPrintable[A](implicit p: Printable[A]) =
p.contramap[Box[A]](_.value)

implicit val stringPrintable: Printable[String] =
new Printable[String] {
def format(value: String): String =
"Foo " |+| value |+| " Too"
}

两者都是类型的实现。问题是,什么时候使用 def和什么时候使用 val

整个代码:
package com.sweetsoft

import cats.instances.string._
import cats.syntax.semigroup._
import cats.Contravariant
import cats.Show
import cats.instances.string._

final case class Box[A](value: A)

trait Printable[A] {
self =>

def format(value: A): String

def contramap[B](func: B => A): Printable[B] =
new Printable[B] {
override def format(value: B): String = self.format(func(value))
}
}


object Main {

val showString = Show[String]

implicit def boxPrintable[A](implicit p: Printable[A]) =
p.contramap[Box[A]](_.value)

implicit val stringPrintable: Printable[String] =
new Printable[String] {
def format(value: String): String =
"Foo " |+| value |+| " Too"
}

implicit val booleanPrintable: Printable[Boolean] =
new Printable[Boolean] {
def format(value: Boolean): String =
if (value) "yes" else "no"
}

def main(args: Array[String]): Unit = {
println(format("Hello"))
//println(format(Box("hello world")))
}

def format[A](value: A)(implicit p: Printable[A]): String =
p.format(value)

}

最佳答案

您的boxPrintable带有类型参数A和类型参数Printable[A]的value参数,因此它必须是def
String是一种特定的类型,因此stringPrintable完全不接受任何参数,它只是一个常量,因此您可以将其定义为val

仅此而已。

关于scala - 隐式def和隐式val之间的区别是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55183775/

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