我见过“<:”和“>:”和“<%”等,有人可以给(或定位)一个很好的描述这些?什么是可能的约束,他们做了什么以及什么时候使用它们的例子?确定和描述斯卡拉的泛型类型约束
45
A
回答
67
S <: T
意味着S
是T
的子类型。这也被称为upper type bound。同样,S >: T
表示S
是T
的超类型,lower type bound。
S <% T
是一个视图绑定,并表示S
必须配备view将其值映射到T
类型的值。
这也让我感到困惑,而且我有一个来自伯克利的编程语言硕士。
52
有两种不同的东西在这里,但他们都知道的“边界”,而不是“限制” ...
首先是类型范围:
<:
- uppper类型绑定>:
- 结合型低
这些是基本相同super
和extends
在Java中,并实际上将在生成的字节码,这是很好的互操作:)被编码为这样
然后是语法糖:
<%
- 视图绑定:
- 上下文界
这些在某种程度上的Java能了解(尽管它们是在斯卡拉签名表示,一个注解,SC不被编码ALA增加了所有课程,帮助编译器,并最终将是一个斯卡拉反射库的基础)
上述这些问题都转化为隐性参数:
def fn[A <% B](arg: A) = ... //sugared
def fn[A](arg: A)(implicit ev: A => B) = ... //unsugared
def fn[A : Numeric](arg: A) = ... //sugared
def fn[A](arg: A)(implicit ev: Numeric[A]) = ... //unsugared
出于这个原因,你可以” t将自己的隐含与视图边界或上下文边界结合起来,因为Scala只允许为任何函数或构造函数标记为隐式的一个块。
如果您确实需要使用您自己的含义,那么您必须首先手动将任何此类边界转换为未加糖的版本并将其添加到隐式块中。
相关问题
- 1. 斯卡拉 - 约束泛型类型特定类型
- 2. 泛型和类型约束的规则
- 3. Java的泛型斯卡拉
- 4. Delphi:泛型和类型约束
- 5. 斯卡拉瑟茜泛型
- 6. 斯卡拉依赖注入泛型类
- 7. 斯卡拉类型约束令人困惑的错误
- 8. 斯卡拉泛型和继承
- 9. 类型约束中的泛型
- 10. 接口的泛型类型约束?
- 11. 类型约束的Swift泛型数组
- 12. C#泛型 - 约束的类型参数
- 13. 指定类型约束上的通用泛型类型
- 14. C#泛型和约束
- 15. 泛型类,约束和继承
- 16. 反映了泛型类型约束
- 17. 斯卡拉地图与泛型类以键/值类型
- 18. 在斯卡拉,是否有减少泛型类型的简写?
- 19. 类和方法层面的泛型类型约束作用
- 20. C#运行时将约束泛型类型转换为约束类型
- 21. 斯卡拉 - 从泛型类型构造方法名称?
- 22. 确定型结构在斯卡拉
- 23. 泛型中的类型别名类型约束
- 24. 约束泛型类型参数的数值类型
- 25. 具有度量约束的泛型类
- 26. 斯卡拉类型参数
- 27. 使用类型[斯卡拉]
- 28. 斯卡拉动态类型
- 29. 斯卡拉类型问题
- 30. 如何指定.NET泛型约束中不允许的类型?
我喜欢这种解释http://stackoverflow.com/questions/2982276/what-is-a-context-bound-in-scala/2983376#2983376 – huynhjl 2011-02-02 03:06:20
可能的重复[什么是Scala上下文和视图边界?] (http://stackoverflow.com/questions/4465948/what-are-scala-context-and-view-bounds) – Suma 2015-04-29 12:55:10