gpt4 book ai didi

scala - 关于类型类的问题

转载 作者:行者123 更新时间:2023-12-04 22:51:23 25 4
gpt4 key购买 nike

我需要定义一个类型类 Field如下:

trait Field[A] {  
// Additive identity
def zero: A

// Multiplicative identity
def one: A
}
Numeric type 类也提供了方法, zeroone .

我希望每个类(class)都有一个 Numeric实例可用的任何地方都可以使用 Field实例是必需的。例如,以下应该有效:
def func[F: Field](f: F) = println(f)
func(2)

你能建议如何实现这一目标吗?我尝试了以下但没有奏效:
scala> implicit def numericToField[N](n: Numeric[N]) = new Field[N] {
| def zero = n.zero
| def one = n.one
| }
numericToField: [N](n: Numeric[N])java.lang.Object with Field[N]

scala> def func[F: Field](f: F) = println(f)
func: [F](f: F)(implicit evidence$1: Field[F])Unit

scala> func(2)
<console>:12: error: could not find implicit value for evidence parameter of type Field[Int]
func(2)
^

最佳答案

你已经差不多了。你只需要做这个小小的改变:

scala> implicit def numericToField[N](implicit n: Numeric[N]) = new Field[N] {
| def zero = n.zero
| def one = n.one
| }

关于scala - 关于类型类的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4874348/

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