我确实遇到了带有隐式方法的 Scala 编译器问题。情节很简单。隐式方法的任务是将案例类 A 的对象转换为案例类 B 的对象。隐式方法实现访问一个不存在的案例类成员。如果 case 类成员在 case 类 A 或 B(例如 foobar)中根本不存在,则编译器会抛出错误。如果案例类成员确实存在于案例类 B 中,则编译器不会抛出错误,即使我使用此名称(即成员 x)访问案例类 A。
我在 2.13.1 版中使用 Scala。目前,2.13.2 是最新版本。
以下代码更详细地显示了该场景。以下代码将导致编译器错误。
package Hokuspokus
object ImplicitMagic extends App {
case class A(a: String, b: String, c: String)
case class B(d: String, e: String, f: String, x: String)
implicit def AtoB: A => B = a => B(a.a, a.b, a.c, a.foobar)
def print(b: B): Unit = {
System.out.println("Print" + b.d)
}
val a = A("foo", "bar", "asdf")
print(a) …Run Code Online (Sandbox Code Playgroud)