说我有这样的特质:
true
显然,如果扩展特征的类没有实现dayRender: function(date, cell) {
var disabledDates = ["2017-08-17", "2017-08-23"];
if ($.inArray(date.format("YYYY-MM-DD"), disabledDates) > -1) {
console.log(date.format("YYYY-MM-DD"));
cell.css("background-color", "green");
}
}
或trait Truthy {
def isFalse = !isTrue
def isTrue = !isFalse
}
并且其中一个被调用,那么这将无限递归。
我可以在没有默认实现的情况下离开isTrue
或isFalse
但是我必须选择并且某些实现可能具有非常自然的isTrue
实现,而其他实现可能具有自然isFalse
一个。
有没有办法强制扩展类实现两种方法中的一种而不偏袒其中一种?
答案 0 :(得分:2)
在Scala中无法强制执行此类约束,但您可以使用多个特征来解决此问题; e.g:
trait Truthy {
def isFalse: Boolean
def isTrue: Boolean
}
object Truthy {
trait DeriveIsFalse {
this: Truthy =>
def isFalse = !isTrue
}
trait DeriveIsTrue {
this: Truthy =>
def isTrue = !isFalse
}
}
然后您可以将其用作:
class MyImplementation extends Truthy with Truthy.DeriveIsTrue {
def isFalse = someMeaningfulImplementation()
}
这是一种方法,但如果使用多种特性,肯定还有其他方法。