Scala 隐式 class 限制

Scala implicit class restriction

Scala documentation 声明隐式 class "must be defined inside of another trait/class/object"

这个限制的原因是什么?

referenced SIP 将隐式 classes 描述为 classdef 的语法糖。

Annotations on implicit classes default to attaching to the generated class and the method. For example,

@bar
implicit class Foo(n: Int)

will desugar into:

@bar implicit def Foo(n: Int): Foo = new Foo(n)
@bar class Foo(n:Int)

因为 def 必须在 trait/class/object 内,隐含的 class 部分 "composed of" 和 def,必须也遵守这个条件。