问题标签 [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.

0 投票
1 回答
572 浏览

c - 使用函数指针、结构、联合和枚举进行子类型化

前言:是的,这是作业。上周左右我一直在研究它,但谷歌搜索没有帮助。我不是在找人帮我完成作业,我更关心理解材料,只是在寻找任何建设性的批评或朝着正确方向推动。

我有 3 个形状结构(圆形、三角形和矩形)、3 个形状结构的联合、一个函数指针结构、一个形状枚举以及所有上述结构(联合、形状类型和函数指针)。

问题:我需要完成子类型/超类型以允许驱动程序在不知道其详细信息的情况下对 Shapes 进行操作。我相信我已经完成了大部分框架,但是在函数指针和使用 ShapeType 枚举和 Shape 结构来实现它们时有点迷失。

原型.h

my_struct.h

my_struct.c

驱动程序.c

任何见解将/将不胜感激。再说一次,我不是在寻找任何人为我做作业,我只是希望能够克服这个障碍。

0 投票
1 回答
170 浏览

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}

? 这里的值的名称、类型和实际值是什么?

谢谢!

0 投票
2 回答
94 浏览

java - 对象和抽象的 ArrayList

我正在尝试在 Java 中学习通配符。在这里,我正在尝试修改该printCollection方法,使其仅采用扩展类AbstractList。它在评论中显示错误。我尝试使用ArrayList对象,它工作正常。我正在使用 Java 7。

0 投票
1 回答
45 浏览

debugging - 在仿函数应用后查看 polyml 中泛型的专业化/子类型

在下面的程序中,我们知道valStr.value 假设pair泛型类型的子类型t。然而,当我在poly类型中检查它时,它显示为t。有什么方法可以在专门的poly解释器中看到吗?tpair

这是我跑步时得到的poly

用于生成它的代码是:

0 投票
1 回答
41 浏览

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的类吗?

0 投票
2 回答
843 浏览

sql - 在 Postgres 中将外键定义为目标表的子集

示例:
我有:

我想在 table_b_id 列上添加一个约束检查,以验证它是否仅指向表 B 中类型值为“X”的行。
我无法更改表结构。
我知道可以使用“CHECK”和一个 postgres 函数来完成特定的查询,但我看到人们建议避免使用它。
关于什么是实施它的最佳方法的任何输入都会有所帮助。

0 投票
5 回答
746 浏览

haskell - 为什么是forall a。a 不被视为 Int 的子类型,而我可以使用 forall a 类型的表达式。任何地方都需要 Int 类型?

考虑以下通过类型检查器的函数定义对:

即类型的表达式forall a. a可以在需要类型之一的地方使用Int。在我看来,这很像子类型,但据称 Haskell 的类型系统缺少子类型。这些形式的可替代性有何不同?

这个问题并不特定于forall a. a. 其他示例包括:

0 投票
1 回答
1382 浏览

sql - 两列上的外键

对于我的学校项目,我需要创建一个数据库。这是我的 ERD。

ERD

在 SQL 中,我创建了 Category 表:

产品表

产品表在 Category.Id 上有一个 CategoryId(外键),但 Product.CategoryId 还需要 Category.SubCategoryId 上的外键。

这可能吗,还是我应该创建一个名为“SubCategory”的额外表,然后将外键添加到 Category.Id 和 SubCategory.Id?

0 投票
1 回答
508 浏览

java - 在泛型类型中将有界通配符转换为无界通配符是错误的(X> 到 X>

考虑这个样本:

换句话说,我可以将 a 分配给Class<? extends T>a Class<?>T但不能将 a 分配Set<Class<? extends T>>给 a Set<Class<?>>

它可能与协方差/逆变的一些限制有关,但是什么?

我可以介绍一个演员表:Class.class::cast会做。但是有没有办法通过微妙的 type-fu 让编译器按照我的意愿弯曲,而不是用演员表猛烈抨击它?

0 投票
1 回答
176 浏览

java - 带有子类的 Java Collection::toArray

Collection::toArray(T[])当你只知道集合的子类型时,有没有办法使用该方法?

举个例子:

(我只是T为了说明而放在那里,我知道那行不通)

我所知道的Collection只是它是 的子类AorB,但它也可能是。JList接受作为它的<? extends AorB>类型,但该setListData方法需要一个数组,并且Collection::toArray需要输入。

我是在用错误的树吠叫toArray吗?有没有一种简单有效的方法可以将此 Collection 转换为数组,而无需手动迭代它?

编辑回答@PaulBoddington:

您不能更改<? extends AorB>为,<AorB>因为该方法将不会收到子类型的集合:

例子:

抛出错误: