Q
是斯卡拉强类型?
4
A
回答
5
- 是。
由于强类型,它不允许“类型双关”,因为我知道它是在C语言中使用。但是,如果A <: B
(A
是B
的子类型或更具体),则可以安全地使用A
类型的值,其中请求B
类型的值。
您可以强制使用a.asInstanceOf[B]
,但是这将是类型检查在运行时类型和导致异常,如果a
是没有一分型B
被抛出,与更高kinded类型除外,它被删除在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专家。但是,如果多类型意味着this,那么这看起来像普通的高级(参数化)类型或“泛型”,并且答案将是是。
- 例:身份功能:
def identity[A](x: A): A = x
- 例子:单一类型参数:
trait Option[+A] { def get: A }
- 例:身份功能:
+1
但是''1.0“+ 5','scala'如何将'5'转换为字符串,结果是'”1.05“'。 Scala在这里表现得像一个弱类型的语言。 – Akavall
相关问题
- 1. 斯卡拉斯卡拉 - 但类RDD是不变的类型T
- 2. 斯卡拉的斯卡拉斯类型推断的状态
- 3. 斯卡拉类型错误
- 4. 斯卡拉 - 返回类型
- 5. 斯卡拉类型问题
- 6. 斯卡拉类型参数
- 7. 斯卡拉返回类型
- 8. 斯卡拉动态类型
- 9. 使用类型[斯卡拉]
- 10. 斯卡拉类型覆盖
- 11. 斯卡拉同构类型
- 12. 斯卡拉类型推迟
- 13. 类型别名斯卡拉
- 14. 斯卡拉类型约束
- 15. 转换类型斯卡拉
- 16. 斯卡拉 - 走样类型的类型
- 17. 斯卡拉 - 类是坏
- 18. 日食斯卡拉插件,斯卡拉项目类型失踪
- 19. 斯卡拉在斯卡拉类
- 20. 强调了在斯卡拉
- 21. 斯卡拉:有界泛型类型
- 22. 斯卡拉泛型:表示类型
- 23. 斯卡拉DAO与类型分类
- 24. 斯卡拉获取类类型
- 25. 斯卡拉:强制编译错误类型别名不匹配
- 26. 斯卡拉类型转换使用隐式 - >强制类型检查
- 27. 斯卡拉 - 一类
- 28. 斯卡拉类型:最小上界
- 29. 斯卡拉未指定类型
- 30. 斯卡拉“类型”别名混淆
你会在一个马蜂窝在这里结束了,因为*弱*或*强*打字([维基百科说]](https://en.wikipedia.org/wiki/Strong_and_weak_typing);) – Carsten
这个问题不能回答,直到你给出“强类型”的确切定义。 –