Class 为什么我可以将方法标记为隐式而不是构造函数?

Class 为什么我可以将方法标记为隐式而不是构造函数?,class,scala,constructor,implicit,enrich-my-library,Class,Scala,Constructor,Implicit,Enrich My Library,常见的Enrich My Library模式似乎类似 class Foo(value: Int) implicit def int2Foo(i: Int) = new Foo(i) 为什么不能像这样将隐式添加到构造函数本身 class Foo implicit (value: Int) 考虑到构造函数只不过是一个有额外限制的方法 令人惊讶的是,以下方法确实有效: class Foo(value: Int) { implicit def this(a: String) = this(a.

常见的Enrich My Library模式似乎类似

class Foo(value: Int)

implicit def int2Foo(i: Int) = new Foo(i)
为什么不能像这样将
隐式
添加到构造函数本身

class Foo implicit (value: Int)
考虑到构造函数只不过是一个有额外限制的方法

令人惊讶的是,以下方法确实有效:

class Foo(value: Int) {
  implicit def this(a: String) = this(a.toInt)
}

如果我正确理解了你的问题(见我上面的评论),你的想法相当于:

implicit class Foo(val i : Int) {
 ...
}
将相当于:

implicit def int2Foo(x : Int) = new Foo(x)
class Foo(val i : Int) {
 ...
}
如果您考虑的不仅仅是去语法化,那么就要避免过度复杂化构造函数声明的语义


但就小规模语法添加而言,这是Martin Odersky提出的,也是Martin Odersky提出的,但我还没有关于实现的消息。

你的意思是不是?如果是这样,就有一个。仅供参考:不,不是真的。。。我们为什么要在这里脱毛?我的想法只是允许将
隐式
添加到构造函数中。向类添加
隐式
?不知道语义应该是什么……在这种情况下,“允许向构造函数添加隐式”意味着什么,除了我上面建议的去语法化之外?我只是不明白你去语法化建议的意义。目前它不是这样工作的,为什么要为一些“特殊情况”添加它?仅供参考,此语法更改已被接受: