问题标签 [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 投票
1 回答
142 浏览

f# - 为什么这个静态类型的成员访问认为它是一个 getter?

setter 是一个 getter

rvm是一个对象,而不是一个函数。

为什么约束(^b:(member ReportSubTitle:(String -> unit)) rvm )以 getter 而不是 setter 的形式出现?这是工具提示问题还是其他问题?

在我使用静态类型泛型的其他地方,我发现我什至根本不需要告诉它类型。这也不起作用:

将此尝试移动到一个函数中并尝试了@kvb 的建议

没有括号

rvm这是封闭范围/方法中的唯一用途

0 投票
2 回答
663 浏览

compiler-construction - 理解结构对等

我有两种难以理解的结构对等思想。

所以在这里,我觉得它们在结构上是等效的,因为从技术上讲,这些类型都指向整数类型,对吗?

但是如果你有类似的东西

指向 int 与整数声明的指针是否使它们不等价?

我认为 VAR_1 和 VAR_2 在结构上是等效的,因为它们以正确的顺序包含相同的数据,但是 VAR_3 失败了,因为它不需要是指针?

0 投票
1 回答
50 浏览

scala - Scala 结构类型,其方法只知道一些参数

鉴于此代码:

如何实现'type HasCopyMethodWithId',以便此代码编译并且在运行时不会失败?

我试过了:

0 投票
1 回答
42 浏览

scala - 结构类型不调用正确的实现?

我的印象是结构类型在底层使用反射(需要告诉编译器启用"-language:reflectiveCalls"),并且任何与类型匹配的对象都将使用它自己的函数版本。例如,如果我调用.containsaSeq它将使用Seq版本,如果我调用它 aString那么它将使用它从StringOps中定义的版本SeqLike

所以在 scala 2.10.3 中,为什么会发生这种情况:

正如你所看到的,a String.contains( String) 为自己返回 true,但如果它在被解释为Containable类型时被调用,则不会返回 true,即使它与 StringOps 类中定义的方法匹配。

我觉得这与实施有关,==因为.contains文档说:

如果此序列有一个元素等于(由 == 确定)elem,则为 true,否则为 false。

通过检查类型的结果使这种感觉更加复杂isInstanceOf

为了回应关于编译器错误的评论,这是我的终端的截屏视频,显示了这个工作

0 投票
3 回答
157 浏览

java - 如何定义方法返回的结构类型

我有许多Builder来自库的 s,它们的源代码是用 Java 自动生成的,超出了我的控制范围。这些Builders 彼此不相关,但它们有许多在结构上完全相同的方法。

使用 Scala 的结构类型,我怎样才能为自己返回构建器?

当我想在 上使用 setA 和 setB 时StructurallyBuilder,编译器抱怨它无法解析。

0 投票
1 回答
920 浏览

typescript - Typescript 类型兼容性测试

Typescript 是否支持直接测试结构类型兼容性?

C# 支持is运算符和类型表面IsAssignableFrom(object instance)

是否有一些直接的方法可以在 Typescript 中执行这种检查,或者我是否必须探测每个必需的成员?

instanceof可能会为手头的情况做,但不尊重结构兼容性,而是检查原型链。

是的,我知道,Typescriptinstanceof直接相当于 C# 的is运算符。但我确实从指定结构类型开始。

也许我应该把一个庸医的方法放在Object

0 投票
1 回答
43 浏览

scala - 集合结构类型参数怪异

这似乎是一个简单的事情,但我无法理解它......

这编译:

但取消注释该// CanFoo1,行给出:

所以看起来编译器理解一个只包含一个元素Seq(CanFoo2)(或Seq(CanFoo1))的集合是正确的类型,但是当两个对象都在集合中时它放弃了吗?我在这里做错了什么?

0 投票
2 回答
191 浏览

scala - 在 AnyVal 的结构类型中获取 java.lang.NoSuchMethodException

我有以下代码片段(我认为)addNumber1(x:T):T在泛型类型上定义了一个方法,该泛型类型T是的子类型, AnyVal并且有一个方法+(s:Int):T

我尝试添加import scala.language.reflectiveCalls以抑制功能警告,但仍然出现错误。

我可以在以下情况下使用AnyRefAny

0 投票
1 回答
113 浏览

scala - 是否可以接受任意提取器作为方法参数

我想重用现有的提取器并组合它们。A => Option[B]完美匹配B => Option[C]

但我很困惑,我怎么能在代码中表达这种关系。

显而易见的方法不可用是有充分理由的:

斯卡拉克 回复:

互联网表示这是由于类型擦除而导致的预期行为。

是否可以改写代码以使其正常工作?

0 投票
1 回答
51 浏览

typescript - 如果结构相同,Typescript readonly typed 类不会与常规 typescript 类冲突

我知道打字稿有一个结构化的打字机制。但是,我希望,如果您有这样的课程:

一个定义如下:

如果您ReadonlyCountry在函数中返回类型为返回类型的对象,则打字系统将显示冲突Country。看起来情况并非如此,如下所示的打字稿游乐场示例。

所以我的问题是,如何确保具有只读属性的类型和不具有只读类型且结构相同的类型在混合时显示类型错误?我是否在这里遗漏了一些愚蠢的东西,仅仅是导致这种情况发生的结构类型吗?

任何帮助,将不胜感激。