问题标签 [structural-typing]

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 投票
2 回答
192 浏览

scala - Scala:F-Bounded Polymorphism Woes

假设存在以下类型和方法:

我希望能够创建一个 PartialFunction 来传递给m.

第一次尝试是写

这失败了type arguments [_$1] do not conform to trait X's type parameter bounds [A <: X[A]]。所以,看来我们必须要约束X的类型参数。

第二次尝试:

这在应用程序上失败,m因为PartialFunction[AnyRef{type A <: X[this.A]},Boolean] <: PartialFunction[X[_],Boolean]是错误的。

有没有什么方法不涉及在偏函数的定义和应用上真正满足编译器的强制转换m

0 投票
4 回答
2770 浏览

haskell - 为什么 Haskell 没有结构类型的记录?

我听说 Haskell 被描述为具有结构类型。据我了解,记录是一个例外。例如,即使它们的字段在名义上有所不同,也不foo能用某种类型来调用。HRec2HRecHRec2

是否有一些解释拒绝将结构类型扩展到包括记录在内的所有内容?

即使对于记录,是否存在具有结构类型的静态类型语言?对于所有静态类型的语言,我是否可以阅读有关这方面的一些争论?

0 投票
2 回答
106 浏览

c# - 如果将结构类型添加到 c# 中需要更改什么?

与 Eric 关于不可空引用类型的博客文章类似,问题的解决方案似乎微不足道,但显然并非如此。

为什么不能在 c# 中添加结构类型?如果像下面的(坏)示例这样的东西刚刚被放入语言中,会出现什么问题?

0 投票
1 回答
212 浏览

scala - 结构类型细化和类型相等

Type.=:=当应用于类型改进时,我偶然发现了一个令人费解的行为。考虑:

鉴于这Base是类型细化的别名,我希望通过添加成员进一步细化它foo会产生与我fooBase.

或者换句话说,我会期望T1T2表示完全等价的类型。

在大多数情况下,scalac 似乎同意。例如,我可以传递一个预期T2实例的实例:T1

反过来说:

我也可以要求提供证据T1 =:= T2,它也可以很好地编译:

但是,使用 scala 反射我得到完全不同的结果:

那么这是一个scala反射错误(我猜是这样)还是有一个根本原因(否则技术上)为什么typeOf[T1] =:= typeOf[T2]会返回false?

0 投票
1 回答
268 浏览

scala - Scala中的结构类型:在细化中使用抽象类型

假设我有以下代码:

以上工作正常。该类Bar是在第 3 方库中定义的,并且有几个类似的类,每个类都有一个bar方法,例如

func我不想为每个此类编写,而是想func使用泛型类型进行定义B ,只要它具有bar正确签名的方法即可。

我尝试了以下方法,但它给了我一个错误:

我得到的错误是:

但是,如果我执行以下操作,则方法定义有效,但调用会出错:

有什么方法可以在不更改代码的情况下做我想做的事Bar吗?

0 投票
2 回答
241 浏览

scala - Scala 结构类型作为函数类型参数

我想创建一些“通用加法器”函数,它适用于所有支持“+”操作的类型。我已经尝试将结构类型作为函数类型参数,但这不能编译:

有没有办法解决这个问题?

0 投票
1 回答
681 浏览

scala - 通过isInstanceOf检查scala中的结构类型

我只是在 scala 中检查结构类型的相等性。

我立即从匿名类创建一个foo实例和一个Q类型。我打算将它们与方法名称不同,以便希望它们在结构上被视为不同的类型。

代码片段:

检查返回真。

Q1: 我不明白为什么fooQ. 那是胡说八道。它们在类型结构的意义上不是不同的吗?

Q2: 那么检查结构类型的正式方法是什么?

0 投票
1 回答
544 浏览

scala - 在 scala 中基于鸭子类型定义泛型类型?

我知道我可以定义鸭子输入generics如下

但是我不想string在我的trait定义中指定整个大。

我怎样才能把它分成两个(我希望我能拥有的):

0 投票
0 回答
96 浏览

haxe - 宏中的结构子类型

这个映射 JSON 对象的函数得到了@:build-ed。当只有一个 JSON 文件或所有文件共享相同的字段结构时,它可以正常工作。但是当对象的结构不同时,我会得到结构子类型错误("Object requires field xxx")。最重要的是,对象的顺序有时很重要。

我不明白为什么要进行类型检查;你会认为它们会是匿名的对象并被单独留下。任何人都可以看看我是否做错了什么;否则我会在 Github 上提出问题。

我正在使用Haxe 3.2.0-rc2

0 投票
1 回答
294 浏览

scala - Scala:通过包外的结构类型访问包可见方法

这不能按预期工作(因为我试图run从外部调用私有包Services):

但是,令人惊讶的是,这有效:

我想说,它是编译器中的一个错误,因为由于包可见性规则,HelloPrinter 与结构类型不匹配,所以它根本不应该编译!

这是程序编译但抛出运行时异常(java.lang.NoSuchMethodException)的情况:

这是我缺少的语言功能或规则,还是 Scala 中的合法错误?