解决方法
>是的.
由于强类型,它不允许“打字”,因为我知道它在C语言中使用.但是,您有子类型,因此如果A<:B(A是B的子类型或更具体的B类型),您可以安全地使用类型A的值,其中请求类型B的值. 您可以使用a.asInstanceOf [B]强制类型,但是这将在运行时进行类型检查,如果a不是B的子类型,则会引发异常,但高级类型除外在JVM上擦除,这意味着只有在引用类型参数的实际值时才会抛出此类异常. 另一个例外是结构类型,可以被认为是“双关语”,虽然类型安全:
// ordinary type trait Foo { def bar: Int } // structural type type Bar = Any { def bar: Int } def test(b: Bar) = b.bar test(new Foo { val bar = 1234 }) // allowed
这被认为是一种很少使用的高级功能,甚至可能在将来的Scala版本中被弃用.它需要运行时反射,因此会带来性能损失.
你也可以使用特殊的Dynamic
trait放弃静态类型系统.或者你可以做疯狂的东西using macros来实现你自己的惩罚.
>不知道,不是ML专家.但是如果polytype只是意味着this,那么这看起来像普通的高级(参数化)类型或“泛型”,答案是肯定的.
>示例:标识函数:def标识[A](x:A):A = x>示例:单一类型参数:特征选项[A] {def get:A}