我有一个简单的问题给你:) 我有以下Scala代码,它编译并给出错误。 实际上我期望代码不被编译,因为它有一个抽象类型的CT。由于scala说无法找到CT类型,因此错误更令人困惑。
class Currency { type ct=Currency }
val c = new Currency
println(c.ct)
错误:值ct不是货币
的成员
感谢您的评论,
谢谢, -A
PS - 使用sala 2.7.7
答案 0 :(得分:14)
仔细查看错误消息:“value ct不是Currency的成员”。这里的“价值”很重要。货币具有类型成员ct,但不是值成员ct。所以c.ct是一个类型,而不是表达式。
答案 1 :(得分:3)
在这种情况下,类型ct不是抽象类型,而是Currency类型的简单类型别名。因此,表达式应该编译。
关于println表达式,您使用c.ct作为要打印的值(通过调用其toString)。这是不正确的,因为c.ct不是值而是类型(路径依赖类型)。因此,涉及c.ct的有效(但有些无意义)表达式可能是:
val a: c.ct = new Currency
希望有所帮助。