object Color {
def apply(r: Int, g: Int, b: Int, a: Int = 255): Color =
new Color(r, g, b, a)
def apply(r: Float, g: Float, b: Float): Color =
Color((r * 255).toInt, (g * 255).toInt, (b * 255).toInt)
}
在我看来,第二个申请应该执行第一个。但是,它会自行执行。如果我要删除可选参数,它可以工作。有办法解决这个问题吗?
答案 0 :(得分:2)
最简单的方法是直接从第二个new Color(...)
方法调用apply
。
我也给他们一个alpha参数。
答案 1 :(得分:2)
如果我正确阅读规范,那么在重载解析(6.26.3)中不会考虑需要使用默认参数的替代方案:
否则,让C为一组不适用的替代方案 将应用程序中的任何默认参数应用于e1,...,em。
因此,您可以通过传递alpha显式调用4参数apply
方法,或直接调用Color
构造函数。
实际上这也意味着在传递3个参数时永远不会调用Int重载,这使得默认参数几乎没用。