作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
为什么这段代码编译失败,但是当我取消注释指示的行时编译成功? (我每晚都使用 Scala 2.8)。似乎显式调用 string2Wrapper
允许从那时起隐式使用它。
class A {
import Implicits.string2Wrapper
def foo() {
//string2Wrapper("A") ==> "B" // <-- uncomment
}
def bar() {
"A" ==> "B"
"B" ==> "C"
"C" ==> "D"
}
object Implicits {
implicit def string2Wrapper(s: String) = new Wrapper(s)
class Wrapper(s: String) {
def ==>(s2: String) {}
}
}
}
"An implicit conversion without explicit result type is visible only in the text following its own definition. That way, we avoid the cyclic reference errors."
最佳答案
显式指定 string2Wrapper 的返回类型可以解决问题。
class A {
import Implicits._
def bar() {
"A" ==> "B"
"B" ==> "C"
"C" ==> "D"
}
object Implicits {
implicit def string2Wrapper(s: String): Wrapper = new Wrapper(s)
class Wrapper(s: String) {
def ==>(s2: String) {}
}
}
}
Implicits
之前
bar
也有效:
class A {
object Implicits {
implicit def string2Wrapper(s: String) = new Wrapper(s)
class Wrapper(s: String) {
def ==>(s2: String) {}
}
}
import Implicits._
def bar() {
"A" ==> "B"
"B" ==> "C"
"C" ==> "D"
}
}
foo
中的显式调用触发
bar
的返回类型的类型推断,然后在键入
bar
的内容时有效.
What is the danger of the cyclic reference error?
Why does an explicit call make a difference?
Implicits.isValid
中的逻辑
sym.isInitialized ||
sym.sourceFile == null ||
(sym.sourceFile ne context.unit.source.file) ||
hasExplicitResultType(sym) ||
comesBefore(sym, context.owner)
关于scala - 为什么这个 Scala 方法的显式调用允许它被隐式解析?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2731185/
我是一名优秀的程序员,十分优秀!