问题标签 [reification]
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.
generics - Scala 的清单有哪些限制?
Manifest
由于 JVM 缺乏具体化的泛型,Scala 的s 是一种解决类型擦除问题的方法。
它们在其他几个问题中进行了讨论;这里有一些:
- 什么是 Scala 中的 Manifest,什么时候需要它?
- Scala 的 (2.8) Manifest 是如何工作的?
- 如何绕过 Scala 上的类型擦除?或者,为什么我不能获取我的集合的类型参数?
- 如何使用 Scala 的 Manifest 类在运行时实例化已擦除的类?
- 清单与类清单。这个 Scala 错误是什么意思?
其中一条评论提到“此功能是实验性的,在某些情况下它不起作用。不过,它可以走很长的路。” (丹尼尔·索布拉尔)
清单方法失败的情况有哪些,为什么?
scala - 对于 Scala,类型擦除有什么好处吗?
我已经听到很多关于不同的 JVM 语言的消息,它们仍然处于蒸汽软件模式,它们建议以某种方式实现具体化。我有这个唠叨的半记得(或完全想象,不知道是哪个)认为我在某处读到 Scala 以某种方式利用 JVM 的类型擦除来完成它无法通过具体化来完成的事情。这对我来说真的没有意义,因为 Scala 是在 CLR 和 JVM 上实现的,所以如果具体化导致某种限制,它将出现在 CLR 实现中(除非 CLR 上的 Scala 只是忽略具体化) .
那么,对于 Scala 的类型擦除是否有好的一面,或者具体化是一件绝对的好事?
javascript - Javascript 中缺少捕获方法并执行一些逻辑?
在 Ruby 中,您可以捕获对缺少的方法的调用并动态定义它。
我想在 JavaScript 中完成的是拥有一个没有方法的对象。我希望将缺少的方法转换为对 emit() 的调用:
我认为最好捕获缺少的方法错误并运行 emit(methodName) 而不是在运行时定义所有方法(来自固定列表)。这样,如果一个对象有成百上千个事件,我们就不会有性能开销。
做这个的最好方式是什么?
更新:这是一个 API 设计,所以我宁愿远离:
我想知道如何在幕后完成此操作,以便用户可以照常使用方法。
scala - 在 Scala 中重载通用事件处理程序
如果我定义以下通用事件处理程序
事件类型是这样的
然后我如何创建一个为这些事件中的每一个实现事件处理程序的类?我试过:
但是 Scala 抱怨一个 trait 不能被继承两次。
我发现这个答案暗示了一个解决方案,但它似乎需要多个类(每个处理程序一个)。这真的是唯一的方法,还是有一些其他的 Scala 构造我可以用来使单个类实现多个通用事件处理程序(即使用案例类、清单或其他一些奇特的构造)?
reflection - 引用、物化与反思的关系
我最近对引用、具体化和反思感到困惑。有人可以对他们的关系和差异(如果有的话)提供一个很好的解释吗?
scala - 什么是 TypeTag 以及如何使用它?
我所知道的关于 TypeTags 的只是它们以某种方式取代了 Manifests。Internet 上的信息很少,无法让我很好地了解该主题。
因此,如果有人在 TypeTags 上分享一些有用材料的链接,包括示例和流行用例,我会很高兴。也欢迎详细的回答和解释。
scala - reify宏扩展期间的StackOverflowError
我有一个使用 reify 的简单测试宏。它会在宏扩展期间导致 StackOverflowError。
为什么会这样?可以以某种方式避免吗?
编辑:这就是 M6 发生的事情。我刚刚用 M7 试了一下,现在它说
实现限制:无法具体化类型 Object{def (): O.type} (ClassInfoType)
所以这回答了为什么的问题,但问题仍然是是否有办法解决这个问题。
scala - scala 表达式的具体化在 v2.9 中有效吗?
我在玩 scala 提升,我偶然发现 Scala 似乎对 lambda 表达式有某种隐式支持。
ast 将在右侧具有 lambda 的 AST。
它似乎不适用于文字,所以:
不起作用。
但这确实:
我似乎无法找到它的文档。似乎没有任何隐式转换处于活动状态。这是如何运作的?
c# - 非泛型类上的 C# 泛型方法归结为什么?
如果我有这样的课程:-
我知道在这个例子中没有必要使用 T 因为所有类型都有 ToString() 等等 - 这只是一个人为的例子。我更感兴趣的是引擎盖下发生的以下情况:-
我广泛地(认为!)我理解具体化,即如果你制作不同类型的泛型类,例如
等等然后在编译时(或运行时?)我们最终得到三种实际的具体类型,一种用于指定的每个通用参数。这是否同样适用于我的第一个示例中的方法调用,即我们是否仍然有一个类 Foo 但三个具体化的 Bar 方法,一个用于 String、Int32 和 Employee?
scala - 关于 joinLeft of Either 的类型约束和具体化
joinLeft
定义为:
- 有了已知的
A
andB
,我们需要一个implicit ev: A1 <:< Either[C, B1]
that- 满足约束
A1 >: A, B1 >: B
。 - 物化
A1 <: Either[C, B1]
- 满足约束
- 为此,我们需要隐式
conforms[A1]
和conforms[Either[C, B1]]
如果直到现在我仍然是正确的,那么在我看来,A1
只要B1
它们超出下限A
和B
. 所以我想知道 scala 如何给我们A1
和Either[C, B1]
(以及它们是什么),以便我们隐含conforms
以促进<:<
完成断言的工作A1 <: Either[C, B1]
。
PS
我认为这个问题与我的另一个问题有点相关“ joinLeft [A1 >: A, B1 >: B, C]... 为什么类型约束 A1 >: A and B1>: B 是必要的? ”。如果有人也可以看看它,我将不胜感激。