问题标签 [type-members]
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.
scala - 存在类型和类型成员
什么有效(A部分)
假设我有一个带有类型参数的特征:
我可以使用存在类型来编写一个方法,该方法将采用A
所有具有相同的 s的集合T
:
请注意,这与以下内容不同:
或等价物:
在这些情况下,存在的范围在 内Seq
,所以A
s 可以有不同T
的 s。使用我的原件foo
(在 上存在存在范围Seq
),以下内容很好:
但是使类型参数不同,它不会编译:
这一切都很简单。
什么有效(B部分)
现在假设我有一个类型成员而不是类型参数的类似特征:
我可以编写一个只需要B
一些指定的方法T
:
同样,这完全符合您的预期。
什么不起作用
当我们尝试编写foo
上面的等价物时,但对于类型成员,事情变得很奇怪。
最后一行编译对我来说毫无意义。我已经告诉它我希望所有类型成员都相同。我foo
表明我可以对类型参数执行此操作,并bar
表明我可以根据类型成员约束类型。但我不能将两者结合起来。
我在 2.9.2 和 2.10.0-M5 上试过这个。
动机
这个问题的灵感来自这个问题,我的第一个想法是,哦,只需使用存在类型(暂时搁置一个问题,即似乎不可能将存在类型应用于重复参数类型的范围,这在这里很方便):
但这实际上不起作用——你会得到与上面简化示例相同的奇怪结果。
scala - Scala将递归有界类型参数(F有界)转换为类型成员
我将如何转换:
类型成员?
即,我想要以下内容:
但我遇到了困难,因为名称 A 已经在类型细化中采用。这个问题是相似的(并且产生自):F-bounded quantification through type member instead of type parameter?
scala - 抽象成员类型的值
我正在尝试使用这种代码:
我在最后一行出现错误:
类型不匹配; 找到:i.type(底层类型为 Outer#Inner) 需要:o.Inner
如果我将申请的签名更改为
然后我得到一个错误:
非法依赖方法类型
是否有可能让这段代码工作?
scala - 如何对抽象成员类型的相等性提出要求
我希望我的 traitOuter
有两个抽象成员类型Inner1
和Inner2
. 我也想Inner2
有抽象成员类型Inner1
。我想提出一个Outer#Inner1
等于的要求Inner2#Inner1
。最方便的方法是什么?到目前为止我有
最后两个陈述不是那么漂亮。是否有更惯用的方式来处理同样的事情?
scala - 类值参数的类型成员的类型不匹配
为什么使用绑定到类值参数的类型成员会产生“类型不匹配”错误?例如:
奇怪的是,当我使用未定义为类参数的值时,一切正常:
这种行为的原因是什么?
scala - 抽象类型的 MyClass.this.T 没有可用的 ClassTag
这很好用
但这不是由于错误No ClassTag available for MyClass.this.T
即使执行以下操作:
如何使用摘要type
并摆脱错误?
scala - 通过匹配类型成员对应的成员值来获取精炼类型
我有一个异构类型的容器
不应该有任何子类Obj
。我正在寻找有关如何优雅地将实例Obj
与多种元素类型匹配以获得精炼Obj
.
例如:
什么是摆脱演员阵容的好主意?理想情况下,它将作为模式匹配工作。
例如,我可以创建单独的提取器:
但是我有很多子类型,Elem
并且更喜欢有一个通用的提取器。
编辑:由于这似乎是一个艰难的,我想添加另一个放松:允许更改Obj
为包含类型参数而不是类型成员(如果有帮助的话)。不允许要求的子类Obj
。
c++ - 标准中类型成员的继承小工具?
在使用 C++ 模板进行编程时,我经常发现定义一个名为type
. 我定义了一种“身份”模板:
我非常喜欢这样我可以经常避免在类定义的大括号之间放置任何东西;而是从id
专业化继承。一个简单的主模板示例可能是:
id
标准库中是否存在类似的东西;或升压?
scala - 存在类型和类型成员的 Scala 类型推断
以下代码无法编译:
它返回以下编译错误:
但是,以下代码符合要求:
我在这里有两个问题:
我希望第一段代码能够编译。为什么不呢?
如果有充分的理由说明第一段代码无法编译,那么出于同样的原因,我希望第二段代码也无法编译。那么,它如何编译成功?
这些都是错误吗?
scala - 引用类型参数的抽象类型成员
我的场景是这样的:
在 REPL 中,它抱怨
这有什么问题?以及(如果可能的话)如何更正此代码?