gpt4 book ai didi

scala - 隐式、pimpl 模式等

转载 作者:行者123 更新时间:2023-12-05 01:22:50 24 4
gpt4 key购买 nike

假设我有这些类(class):

case class A()
case class B()
case class C(a: A, b: B)

和这些变量:

val a = A()
val b = B()

有没有一种方法可以隐式地获取 C 的实例,而无需使 ab 隐式 vals? IE。如果我有一个需要 C 的方法:

def foo(c: C)

最佳答案

case class A 表示法已弃用。您必须使用 case class A(),否则将 A 分配给 val a 将导致 a 引用到在后台生成的案例类 A 的伴生对象。

据我了解,您希望 a 引用案例类的实例,而不是伴随对象。

如果是这样,您的要求是可能的 - ab 不必是隐式的,但您必须添加一个新的隐式方法到范围:

implicit def obtainC = new C(a, b)

然后,你必须将 implicit 修饰符放在 foo 方法中的 c 中:

def foo(implicit c: C)

完成 session :

scala> case class A()
defined class A

scala> case class B()
defined class B

scala> case class C(a: A, b: B)
defined class C

scala> val a = A()
a: A = A()

scala> val b = B()
b: B = B()

scala> implicit def obtainC = new C(a, b)
obtainC: C

scala> def foo(implicit c: C) = {}
foo: (implicit c: C)Unit

scala> foo

关于scala - 隐式、pimpl 模式等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5090748/

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