【发布时间】:2014-08-09 13:10:41
【问题描述】:
我有以下代码:
import com.github.nscala_time.time.Imports._
class Account {
def balance(date: DateTime): Double = {
/* some logic that calculates balance on given date */
val calculatedBalance = 42
calculatedBalance
}
def balance: Double = balance(DateTime.now)
}
class Deposit(val interestRate: Double) extends Account {
override def balance(date: DateTime): Double = {
/* some logic that calculates balance for deposit account */
val calculatedBalance = 100 * interestRate;
calculatedBalance
}
}
我尝试通过以下方式使用这些类:
val simpleAccount = new Account
val depositAccount = new Deposit(0.1)
val simpleBalanceOnDate = simpleAccount.balance(DateTime.now + 1.month) // A
val depositBalanceOnDate = depositAccount.balance(DateTime.now + 1.month) // B
val simpleBalance = simpleAccount.balance // C
val depositBalance = depositAccount.balance // D
案例A、B 和C 编译时没有任何错误,但对于D 行,我看到错误消息:
Error:(28, 38) ambiguous reference to overloaded definition,
both method balance in class Deposit of type (date: com.github.nscala_time.time.Imports.DateTime)Double
and method balance in class Account of type => Double
match expected type ?
val depositBalance = depositAccount.balance
^
您能否解释一下为什么D 会出现编译错误以及为什么C 不会出现编译错误?
提前致谢!
【问题讨论】:
-
我认为这只是 Scala 编译器 的错误。如果是的话可以参考scala-lang.org/contribute/bug-reporting-guide.html
标签: scala compiler-errors overriding overloading