English 中文(简体)
Scala: 能否将类型参数限制为非抽象?
原标题:Scala: Is it possible to constrain a type parameter to be non abstract?

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
}
最佳回答

new T () 的需要通常通过使用 Manifest 来解决。

class ExampleClass[T: Manifest] {
  val example: T = manifest[T].erasure.newInstance().asInstanceOf[T]
}

其缺点是,如果对 ExampleClass 进行即时处理的 T 没有无弧构造器,在运行时将失败...

关于 Numeric , ordering 等,它们是 类类型 ,属于标准库的一部分,不是语言的一部分。您可以建立自己的类型类。 Manifest 的例子很特殊,因为它得到语言的支持,可以提供隐含对象。

问题回答

暂无回答




相关问题
Generic constraint exclusion

Sorry for asking silly question Is it possible to enforce constraint on generic in such a way that the given T can be derived from any reference Type except some A,B,C (where A,B,C are reference ...

Can a Type Derive from Itself?

When enforcing a Generic constraint class GenericTest { public void Sample<T>(T someValue) where T:Racer,new() { Console.WriteLine(someValue.Car); } } The Type T should be ...

C# Deriving Generic Methods

When i need to pass a Generic Type I can use the Syntax (Example : Ofcourse it is not a Generic Method) public void Sample(T someValue) { ...... } What is the benefit of declaring Sample<T>...

What is the benefit to using List<T> over IEnumerable<T>?

or the other way around? I use generic lists all the time. But I hear occasionally about IEnumerables, too, and I honestly have no clue (today) what they are for and why I should use them. So, at ...

热门标签