subtyping

    6热度

    1回答

    为什么这个合法的TypeScript? var x: number = 5 var y: Object = x 当然,一个数字不是Object。有人可能会怀疑x被隐式强制(自动盒装)的一个对象,但没有: if (!(y instanceof Object)) { console.log(typeof y) } 打印 number 对于记录:在打字稿 $ tsc --ver

    6热度

    1回答

    常识意味着子类型应该与返回类型协变,但相对于参数类型相反。因此,下面应该被拒绝,因为严格的协变参数类型的E.f的: interface C { f (o: C): void } interface D extends C { g(): void // give D an extra service } class E implements C { // i

    0热度

    2回答

    C++允许使用类子类型,这非常方便,因为您可以使用派生类为基类实现的函数。 Rust似乎没有这样的东西。该功能似乎在某些时候已经可用,但自此之后已被删除。这在Rust中是不可能的吗?如果是这样,有没有计划有这个功能? 我想要做的就是确定从另一个结构,这在C++看起来像继承结构: struct Base { int x; int y; void foo(int x, i

    1热度

    1回答

    我认为问题标题有点混乱,但我找不到更准确的说法。 我只需要一个简单的代码示例来告诉你我想要什么。 我: // code 1 interface A { A bla(); } class B implements A { @Override public B bla() { return this; } } class C implements A { @Override public C b

    4热度

    2回答

    我希望有一个A|B类型为A|B|C的子类型。这是可能的编码在斯卡拉?如果是,如何? 我希望我可以编译下面implicitly[¬¬[IF] <:< T](原代码here),但它不。有没有办法解决这个代码,以允许子类型? object NUnion{ type ¬¬[A] = ¬[¬[A]] type ¬[A] = A => Nothing trait Disj[T]

    1热度

    1回答

    在this问题中,未标记的联合被描述为子类型的一种形式。 类型类也是子类型的一种形式。 它们在概念上是否相同?呃他们是,我将如何在Haskell中实现这些?

    2热度

    1回答

    在流动结构亚型可能会导致信息丢失: type O = {x: number, y: number}; type P = {x: number, y: number, z: number} function f(o: O) { return o.x * 2, o.y * 2, o; } const p: P = {x: 2, y: 3, z: 100}; const r =

    2热度

    2回答

    今天在编程语言类的理论,我们在Java中看到这种行为: public class Es { ... <Y> Y choose(Y y1, Y y2){ Y returnVal; if("some test"){ returnVal = y1;} else{ returnVal = y2;} return returnVal; }

    -2热度

    1回答

    我创建了一个扩展到Counter的类,它跟踪增加和减少。即时通讯设法调用xs,然后返回数字上升或下降的时间总和,这是由xs实例调用的,它的编译却失败了。 class Counter { private var n = 0 def increment() = { n = n + 1 } def decrement() = { n = n - 1 } def g

    3热度

    1回答

    子类型和包含有什么区别?包含意味着隐含的强制吗?