Scala: 能否将类型参数限制为非抽象?
除了类型参数和抽象类型成员的查看界限、上下限和下限之外,还有任何其他可能的限制吗?例如,在我熟悉的C##中,你还有其他的一般性限制:
T: 类 /// 不确定此是否包含在 T< T< 的 Scala 中: 任何参考文件
T: 接口
此处的 T: 支流
U:T///裸体型限制
其中 T : 新 () / / 这确保类型参数是非抽象的, 并允许您在通用类中对类型对象进行即时处理 。
最后一个特别重要,因为它允许您构建未知类型, 尽管它是一种耻辱, 您只能禁止无参数构建器 。
=: = = & lt; : & lt; 和 & lt;\\\ lt; 只能用于方法参数吗?
在答复这些意见时,问题的直接触发因素是需要“T:新的()”限制或某种相当的机制。
class ExampleClass[T <: AnyRef] {
val example: T = new T()//Won t compile as the compiler
} //doesn t know if such a constructor exists
某些C# # 限制的用法特别适合 C# 的需要 。 例如, 在 C# 中, 人们一直想要的 一种限制是 “ T: 数字Type ” 。 这个问题已经在 Scala 中解决了。 我仍然非常喜欢用脚绑在 Scala 语言上, 因此除了以上之外, 我只是试图澄清在 Scala 语法的这个面板上, 我究竟有什么工具, 并且没有工具, 尽管我还不知道在 Scala 语法中, 我到底该如何使用这些工具 。
我不知道这是否完全相关,但有时,编译者(Eclipse 2.1.0.M1和Eclipse 3.7.2)似乎不会让我即时收集未知元素类型。下面的代码现在似乎编译得很好。所以我想知道规则是什么:
abstract class Descrip [T <: DTypes]()
{
val hexs: MutableList[T#HexT] = new MutableList[T#HexT] //compiles fine
val sides: MutableList[T#SideT] = new MutableList[T#SideT] //compiles fine
}