问题标签 [implicits]
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 - Scala 中类型不相等的证据
有没有办法约束一个方法,以便只有在两种类型被证明不相等时才有意义?
scala - 根据 Scala 中类型证据的存在的惯用分支方式
我发现自己不止一次写了以下丑陋的模式:
更糟糕的是,当 时ev != null
,我有时会写出诸如 之类的异端邪说someB.asInstanceOf[A]
。
scala - 是否可以在 Scala 中同时具有隐式 Ordering[Option[T] 和 Ordered[Option[T]] ?
我的代码:
-Xlog-implicits 的结果:
我认为这里发生的是 Ordered 和 Ordering 之间的循环 - 隐式 Ordering[Option[Date]] 在范围内,因为它是在对象 Ordering 中定义的,它是 java.util.Comparator 的子类,因此您可以使用它来创建另一个订单...
这是针对scala 2.10编译的,好像2.11在这方面有变化,但是当我尝试升级scala时,scalac进入了无限循环。
编辑:只是为了表明我不是一无所知,我暂时用import Ordered._
我的替换来修复它import OrderedFix._
:
但这很愚蠢,这就是标准库应该提供的......
scala - 通过抽象类型成员查找隐式值
使用 like 的类型trait A[T]
,在范围内查找隐式很简单implicitly[A[SomeType]]
可以这样做吗?如果可以,在类型参数被替换为抽象类型成员的情况下,如何做到这一点,例如 in trait A { type T }
?
scala - 从消费类消费隐含
我正在寻找让包含类获取其包含类所暴露的隐含的最佳语法?
我的场景有两个抽象的依赖项用于测试:创建应用程序的actorsystem,以及一个恰好也需要actorsystem的webclient:
现在,我创建了一个提供actorsystem和api的新应用程序,但是Api需要一个隐式actorsystem,而我想出的唯一方法是像这样手动提供它:
有没有更好的语法让 WebClient 从 Core 中获取隐式?我不能让它扩展核心,因为它包含在核心实现中,并且需要作为包含在那里的其他东西的依赖项。但是对于应该是,呃,隐含override implict def system = implicitly[ActorSystem]
的东西似乎相当笨拙
scala - 从非协变类的实例创建协变类型类的实例
假设我有一个简单的类型类,它的实例会给我某种类型的值:
我有一些例子:
现在我有一个类似(但不相关)的类型类,它做同样的事情,但它的类型参数是协变的:
在它的伴生对象中,我们告诉编译器如何从我们的非协变类型类的实例中创建实例:
现在我希望implicitly[GiveMeA[Foo]]
编译得很好,因为只有一种方法可以得到GiveMeA[Foo]
我们这里的给定部分。但它没有(至少不是在 2.10.4 或 2.11.2 上):
如果我们摆脱不相关的GiveMeJustA
实例,它会起作用:
尽管事实上我们无法应用GiveMeA.fromGiveMeJustA
此实例来获取 a GiveMeA[Foo]
(或 的任何子类型GiveMeA[Foo]
)。
这对我来说似乎是一个错误,但我可能遗漏了一些东西。这有道理吗?有没有合理的解决方法?
scala - 在生成类型类实例时无法证明单例类型是单例类型
假设我有一个类型类来证明无形联积中的所有类型都是单例类型:
我们可以证明它与一个简单的 ADT 一起工作:
进而:
现在我们想将其与 Shapeless 的Generic
机制结合起来,这将为我们提供 ADT 的联积表示:
我希望implicitly[EnumerableAdt[Foo]]
工作,但事实并非如此。我们可以使用它-Xlog-implicits
来获取有关原因的一些信息:
Baz.type
不过,显然是单例类型。我们可以尝试Witness
手动将实例放入范围内,只是为了好玩:
不知何故,现在它起作用了:
我不明白为什么这些实例会在这种情况下工作,而由Witness.apply
宏方法(我们用来创建它们)生成的那些却不能。这里发生了什么?是否有一种方便的解决方法,不需要我们手动枚举构造函数?
scala - 是否有关于在 scala 中使用具有默认值的隐式参数的样式指南?
使用这样的解决方案可以吗:
如果不需要,它允许您不指定隐式。但是许多库(至少 Lift Json 和 Scala Concurrent)避免了这种默认的隐式值,并推动用户始终指定隐式。对图书馆设计师有什么建议吗?
scala - scala中的隐式解析及其参数类型推断
是否有任何关于隐式解析如何工作的好资料,特别是关于在其中搜索所有隐式参数的类型推断和顺序(如果有)?
首先,我当然阅读了 Scala 语言规范,所以我理解(或者我认为)基础知识,比如编译器在哪里搜索隐式。然而,每当我尝试做一些更高级的事情时,比如递归隐式,我总是会遇到超自然的问题,与它们一起工作就像是在练习实验魔法。即使将所有隐式保存在一个伴生对象中,从而消除所有与冲突有关的困难问题,代码中的一些更改(不应该根据规范更改语义)有时会在编译和不编译之间产生差异。
我记得编译器找不到隐式 for 的情况Companion
,但import Companion._
在调用之前引入使其编译,并且 object Companion 只有隐式 defs 返回 Companion 实例。
我有一个这样的代码结构的案例:
没有编译,但是将隐含定义(ParticularEvidence 的唯一定义)从 ParticularEvidence 移动到父 Evidence 对象使它们可见。
经过反复试验,我了解到解析逻辑非常有限,例如此类的构造:
证据类对其类型参数不变的情况下,即使只有一种类型 Z 存在此类隐式值,也很少会编译。但我不知道为什么以下是一个问题:
我在这里尝试使用盒装类型的联合(||[A, B] 基本上是一种美化的 Either,具有透明的结构扁平化和隐藏的左/右选项)。减号是我想要实现的类型算术的一部分:在最后一行中,我要求编译器提供 SA||SB - Nothing = SA||SB 的证据。更一般地说,当且仅当 C 是包含来自 A 的所有值且没有 B 值的最小类型时,我希望存在隐式减号 [A,B,C]。此外,我希望它能够找到 sch 证据,即使 C是未知的,仅来自 A,B,因此我可以尝试实现隐式证据,允许将任何类型的联合自动转换为某种规范化形式。最终,我想找到提供标准化值的隐式方法的这种组合,我将能够编写如下内容:
因此,编译器在隐式方法强制执行的规则集的帮助下,应该能够通过摆脱由其他部分支配的部分来简化联合类型。为此,我必须能够对类型进行集合减法。
我知道我可能在这个敌人的领土上很远,任何编译器更改都可能会因此而破坏整个程序,但我主要将其视为一个谜题和概念证明。一旦我知道什么是可能的,我就会开始思考什么是明智的。
所以具体的问题是:有没有人知道上面的代码到底出了什么问题,如果可以修复它可以吗?
scala - Playframework 的 Session 是如何注入到 Action 中的?
我正在尝试编写自己的操作并隐式传入 DatabaseSession。但是,充其量我可以在我的控制器中做这样的事情。
在 playframework 中,您可以像这样访问会话:
在这里,我们可以看到,当只有请求作为隐式传入时,您可以直接访问会话。那么会话是从哪里来的呢?我怎么能像 Session 一样传入我的 DatabaseSession?这样我就不必写了:
我知道这是可能的,因为 slick 能够隐式传递他们的 dbSession。但我似乎也无法弄清楚他们是如何做到的。
完全糊涂了!=S