问题标签 [subtyping]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 使用函数指针、结构、联合和枚举进行子类型化
前言:是的,这是作业。上周左右我一直在研究它,但谷歌搜索没有帮助。我不是在找人帮我完成作业,我更关心理解材料,只是在寻找任何建设性的批评或朝着正确方向推动。
我有 3 个形状结构(圆形、三角形和矩形)、3 个形状结构的联合、一个函数指针结构、一个形状枚举以及所有上述结构(联合、形状类型和函数指针)。
问题:我需要完成子类型/超类型以允许驱动程序在不知道其详细信息的情况下对 Shapes 进行操作。我相信我已经完成了大部分框架,但是在函数指针和使用 ShapeType 枚举和 Shape 结构来实现它们时有点迷失。
原型.h
my_struct.h
my_struct.c
驱动程序.c
任何见解将/将不胜感激。再说一次,我不是在寻找任何人为我做作业,我只是希望能够克服这个障碍。
function - Scala val 语法:val myVal:{ def ... } 是什么意思?
我是 Scala 和 funcprog 的新手。
我有一段代码(你们中的一些人可能认识它):
我不明白 val ValueChanged: {...} 是什么。
从这篇文章中我了解到
和
是两个不相关的东西,因为它们位于不同的命名空间等中,而 ValueChanged类型是Event的抽象子类型。
好,然后我尝试使用 Scala 工作表:
它告诉我一个错误“只有类可以有声明和未定义的成员”......这不是一个类似的结构吗?
最后,问题是:
代码的val ValueChanged部分中的ValueChanged是什么?
它真的与ValueChanged <: Event 类型无关吗
这个语法是什么意思:
val myVal:{def func{x:T}:T}
? 这里的值的名称、类型和实际值是什么?
谢谢!
java - 对象和抽象的 ArrayList
我正在尝试在 Java 中学习通配符。在这里,我正在尝试修改该printCollection
方法,使其仅采用扩展类AbstractList
。它在评论中显示错误。我尝试使用ArrayList
对象,它工作正常。我正在使用 Java 7。
debugging - 在仿函数应用后查看 polyml 中泛型的专业化/子类型
在下面的程序中,我们知道valStr.value
假设pair
泛型类型的子类型t
。然而,当我在poly
类型中检查它时,它显示为t
。有什么方法可以在专门的poly
解释器中看到吗?t
pair
这是我跑步时得到的poly
:
用于生成它的代码是:
java - Java SE 规范 |S| 象征
我正在阅读 Java Specification for subtyping and cast 我知道 S <: T 表示 S 是 T 的子类型。但是,我不明白 |S| 是什么 <: |T| 方法?例如在这种情况下:
一个类型参数是类型变量或通配符,其上限(来自捕获转换,如有必要)为 S;并且另一个类型参数 T 不是类型变量或通配符;也没有|S| <: |T| 也不 |T| <: |S|。
|T| 是 T 参考的类型?它是指T的类吗?
sql - 在 Postgres 中将外键定义为目标表的子集
示例:
我有:
我想在 table_b_id 列上添加一个约束检查,以验证它是否仅指向表 B 中类型值为“X”的行。
我无法更改表结构。
我知道可以使用“CHECK”和一个 postgres 函数来完成特定的查询,但我看到人们建议避免使用它。
关于什么是实施它的最佳方法的任何输入都会有所帮助。
haskell - 为什么是forall a。a 不被视为 Int 的子类型,而我可以使用 forall a 类型的表达式。任何地方都需要 Int 类型?
考虑以下通过类型检查器的函数定义对:
即类型的表达式forall a. a
可以在需要类型之一的地方使用Int
。在我看来,这很像子类型,但据称 Haskell 的类型系统缺少子类型。这些形式的可替代性有何不同?
这个问题并不特定于forall a. a
. 其他示例包括:
java - 在泛型类型中将有界通配符转换为无界通配符是错误的(X> 到 X>
考虑这个样本:
换句话说,我可以将 a 分配给Class<? extends T>
a Class<?>
,T
但不能将 a 分配Set<Class<? extends T>>
给 a Set<Class<?>>
。
它可能与协方差/逆变的一些限制有关,但是什么?
我可以介绍一个演员表:Class.class::cast
会做。但是有没有办法通过微妙的 type-fu 让编译器按照我的意愿弯曲,而不是用演员表猛烈抨击它?
java - 带有子类的 Java Collection::toArray
Collection::toArray(T[])
当你只知道集合的子类型时,有没有办法使用该方法?
举个例子:
(我只是T
为了说明而放在那里,我知道那行不通)
我所知道的Collection
只是它是 的子类AorB
,但它也可能是。JList
接受作为它的<? extends AorB>
类型,但该setListData
方法需要一个数组,并且Collection::toArray
需要输入。
我是在用错误的树吠叫toArray
吗?有没有一种简单有效的方法可以将此 Collection 转换为数组,而无需手动迭代它?
编辑回答@PaulBoddington:
您不能更改<? extends AorB>
为,<AorB>
因为该方法将不会收到子类型的集合:
例子:
抛出错误: