问题标签 [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.

0 投票
3 回答
735 浏览

scala - 如何在 Scala 中表达这种类型?存在类型类(即隐式)限制?

我正在使用 Play 框架的 JSON 库,它使用类型类来实现Json.toJson函数。(我可能会决定使用另一种静态类型较少的技术,比如反射;但现在我想使用这个库,因为它可以帮助我学习 Scala 类型系统。)

我有一堆需要传递给的简单案例类toJson,所以我必须Writes[T]为它们中的每一个实现一个隐式对象。对于每个类,第一次剪辑可能看起来像这样。

每个类都有一个相似的隐含值,所以我可以抽象出公共部分,如下所示。但这不会编译,因为我不确定如何声明类型。

问题是T我要传递给的类型makeSimpleWrites。它不能是普通类型参数,因为 T 中的每个项目都不同fields。这是存在主义的类型吗?我还没有使用其中之一。在语法上挥舞...

这在 Scala 中可行吗?如果是这样,语法是什么?

0 投票
1 回答
423 浏览

scala - 类型别名和类型 lambda 之间的区别

这个问题是关于 Scala 隐式解析系统的限制,我在使用 Scalaz 时遇到过几次,这对我来说没有多大意义。我已将问题提炼为下面的无 Scalaz 版本,但如果需要,我很乐意提供有关动机的更多信息。

假设我有几个类型类见证了类型构造函数:

现在还假设如果我有Foo一些实例F,我知道我也有一个Foo实例Bar[F, _]

我也有实例List和右侧Either

现在很清楚我应该能够编写以下内容:

或者,等效地:

事实上,两者都按预期工作。

所以我尝试以下方法:

接着:

同样,这里没有惊喜。但后来我尝试:

我得到以下信息:

请注意,我可以毫无问题地推断出必要的Foo实例StringOr,或者显式调用barFoo以获取所需的实例:

我无法确定允许 lambda 类型版本适用于前者但不适用于后者的情况List之间可能存在的重要区别。StringOr

我在 Scala 2.10.0-RC5 和 2.9.2 上试过这个。在整个过程中添加协方差并没有帮助。

我错过了一些明显的东西吗?有人可以指出规范中的某些内容可以帮助我理解这一点,或者指向以前对类似问题的讨论吗?

0 投票
1 回答
253 浏览

scala - 如何隐式地getClass

我正在用方法签名在一些 Java 代码上编写 Scala 包装器,并且代码中的method(cl: Class[_], name: String)许多 getClass 方法看起来并不好:

那么我们能以某种方式隐含地获得封闭类Creator.create("some name")吗?

0 投票
2 回答
738 浏览

scala - 使用带有 PriorityQueue (Scala) 的隐式排序时遇到问题

我正在尝试创建一个包含其中的数据结构PriorityQueue。我已经成功地制作了它的非通用版本。我可以说它有效,因为它解决了我遇到的 AI 问题。
这是它的一个片段:

我正在尝试使其通用,但如果我使用此版本,它将停止解决问题:

我也尝试过注释掉的内容而不是使用[T <% Ordered[T]]

这是调用的代码PQ

我也尝试过将隐式 def 移动到Node对象中(并导入它),但本质上是同样的问题。

我在通用版本中做错了什么?我应该把隐式放在哪里?


解决方案 问题不在于我的隐含定义。问题是隐式排序被在语句Set中自动生成的 a拾取。for(...) yield(...)这导致产生的集合仅包含一个状态的问题。

0 投票
1 回答
1385 浏览

c# - 使用 Mapper 与隐式运算符有什么优势吗?

映射器自动映射:

隐式运算符:

0 投票
1 回答
69 浏览

scala - 隐式参数不起作用

假设我有以下 scala 代码:

上面的代码编译得很好,但是当我将最后一行(对象测试中的方法“值”的主体)更改为

编译器抱怨找不到参数 F0 的隐式值:ValueSource[A]

在我看来,def value[A: ValueSource] 意味着我有一个隐含的值“ValueSource[A]”,那么为什么编译会失败呢?

0 投票
2 回答
1171 浏览

scala - 多个隐式参数的Scala解析

在尝试回答这个问题时,我想出了以下代码:

请注意,这IntLike只是为了让我相信这不是关注的问题Int

这似乎是一个相当标准的隐式使用,如果不好的话,我期待它能够愉快地工作。但是,在调用purchaseCandles()REPL 时会产生以下错误:

错误:不明确的隐式值:类型 => scala.collection.generic.CanBuildFrom[String,Char,String] 的对象 Predef 中的值 StringCanBuildFrom 和 Tree 类型的值 guest 都匹配预期的类型 A

我一辈子都看不到这是怎么回事。A 必然有一个 的视图边界IntLike,这是我刚刚发明的一种类型。REPL 确认没有可用的隐式视图:

scala> 隐式[Tree => IntLike]

res14: 树 => IntLike = function1

scala> 隐式[scala.collection.generic.CanBuildFrom[String, Char, String] => IntLike]

:18: 错误:scala.collection.generic.CanBuildFrom[String,Char,String] => IntLike 没有可用的隐式视图。

那么怎么可能StringCanBuildFrom是合适的类型呢?编译器是否能够解析多个依赖隐式,如果不能,为什么会显示这个错误?

0 投票
1 回答
7487 浏览

c++ - 编译器不定义隐式的条件(构造函数、析构函数、复制构造函数、复制赋值)

这应该是一个微不足道的问题,但我无法在 stackoverflow 上明确找到它。

如果用户未提供以下内容,则将隐含定义。

  1. 默认(无参数)构造函数
  2. 复制构造函数
  3. 复制赋值运算符
  4. 析构函数

但是我在某处读过(我现在似乎找不到),在某些情况下编译器不会隐式实现它们。

这些条件是什么?

0 投票
1 回答
376 浏览

scala - Scala 隐式上下文解析

我在 SLS 中找到了隐含解析的规则:

  1. 如果 T 是复合类型 T1 与 ... 与 Tn,T1、...、Tn 的各部分的并集,以及 T 本身

  2. 如果 T 是参数化类型 S[T1, ..., Tn],则 S 和 T1, ..., Tn 各部分的并集

  3. 如果 T 是单例类型 p.type,则 p 的类型的部分

  4. 如果 T 是类型投影 S#U,则 S 的部分以及 T 本身

  5. 在所有其他情况下,只有 T 本身

下面的示例是基于规则 4 的隐式解析吗?

谢谢

兹拉亚

0 投票
0 回答
1500 浏览

scala - 尝试使用 sortBy 对元组列表进行排序

在我的 scala eclipse 工作表中,我这样做:

我不明白为什么 sortBy 函数会给出<error>或如何找到有关它的更多信息。

当我将相同的代码放入 scala 类时,我得到:

我看到其他线程出现此错误。但它们是不同的情况。

任何帮助表示赞赏