Scala隐式类限制

tal*_*lex 2 scala language-design

Scala 文档声明隐式类"必须在另一个trait/class/object中定义"

这种约束的原因是什么?

mik*_*łak 6

参考SIP形容为一个语法糖隐含类classdef.

隐式类的注释默认附加到生成的类和方法.例如,

@bar
implicit class Foo(n: Int)
Run Code Online (Sandbox Code Playgroud)

将desugar:

@bar implicit def Foo(n: Int): Foo = new Foo(n)
@bar class Foo(n:Int)
Run Code Online (Sandbox Code Playgroud)

由于a def必须在trait/class/object中,因此部分"由a"组成的隐式类def也必须遵守这一条件.