我发现自我是一个非常有趣的事实.例如我写道:
type A = { val st: Set[Any]
val start: Set[Any]
val Sigma : Set[Char]
def tr(f: (Tuple2[Any, Any])=>Boolean): Set[Any]
}
class Fon {
val st: Set[Any]
val start: Set[Any]
val Sigma : Set[Char]
def tr(f: (Tuple2[Any, Any])=>Boolean): Set[Any] = Set(out)
def out: String = "is just example"
}
val a: A = new Fon
a.tr(f(Tuple2('a',0)))
Run Code Online (Sandbox Code Playgroud)
但是,如果我会尝试调用a.out - 我得到一个错误,A类型不存在'out'发生了什么,这是如何工作的?谢谢.
A.out由于您已经定义了A类型,因此没有这样的方法.因此,当您尝试调用out对类型对象调用的方法时A,编译器会正确地告诉您不存在此类方法.
顺便说一句,这与结构类型无关 - 如果你已经制作A了一个特性并且已经Fon扩展了它,那么你会遇到完全相同的问题.而且,这就是静态类型系统的工作原理 - 编译器无法保证您的代码是类型安全的,因此它不会编译它.
如果要调用该out方法,则需要通过Fon变量引用该对象:
val a: Fon = new Fon
println(a.out) // works fine, since a is guaranteed to be a Fon and thus have the method
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
277 次 |
| 最近记录: |