【发布时间】:2015-04-02 13:24:51
【问题描述】:
我不知道如何(如果有的话)在 Scala 中为 type 参数设置默认值。
目前我有一个类似的方法:
def getStage[T <: Stage](key: String): T = {
// Do fancy stuff that returns something
}
但我想做的是提供getStage 的实现,它不为T 取值,而是使用默认值。我试图只定义另一种方法并重载参数,但这只会导致其中一种方法被另一种方法完全覆盖。如果我不清楚我想要做的是这样的事情:
def getStage[T<:Stage = Stage[_]](key: String): T = {
}
我希望我的要求很清楚。有谁知道如何实现这样的目标?
【问题讨论】:
-
getStage将如何返回T类型的值(假设T可以是任何合适的类型)?大概你必须使用asInstanceOf或类似的,这通常是不可取的。您能否详细解释一下如何调用此代码,以及您要实现的目标是什么? -
很可能我做错了,因为我还没有习惯 Scala 的做事方式......
getStage方法定义的类管理一个Map[String,SyncStage]实例变量。我打算使用匹配来确保对象属于预期的类(因此不需要asInstanceOf),否则会引发错误(它永远不会发生,因为 key 不是运行时指定的变量)。我有一个替代方案可以完全避免这一切,但我想知道这是否可能,因为我已经处于另一个类似的情况...... -
没有默认类型参数这样的东西。可能可以解决类型约束,但最好避免这种情况。
-
@m-z 如果您使用类型类来指导参数的推断,我认为没有任何理由建议避免这种情况。当然,您可能会遇到隐式解析规则令人困惑的情况,但这通常仍然是合理的做法。