问题标签 [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 中表达这种类型?存在类型类(即隐式)限制?
我正在使用 Play 框架的 JSON 库,它使用类型类来实现Json.toJson
函数。(我可能会决定使用另一种静态类型较少的技术,比如反射;但现在我想使用这个库,因为它可以帮助我学习 Scala 类型系统。)
我有一堆需要传递给的简单案例类toJson
,所以我必须Writes[T]
为它们中的每一个实现一个隐式对象。对于每个类,第一次剪辑可能看起来像这样。
每个类都有一个相似的隐含值,所以我可以抽象出公共部分,如下所示。但这不会编译,因为我不确定如何声明类型。
问题是T
我要传递给的类型makeSimpleWrites
。它不能是普通类型参数,因为 T 中的每个项目都不同fields
。这是存在主义的类型吗?我还没有使用其中之一。在语法上挥舞...
这在 Scala 中可行吗?如果是这样,语法是什么?
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 上试过这个。在整个过程中添加协方差并没有帮助。
我错过了一些明显的东西吗?有人可以指出规范中的某些内容可以帮助我理解这一点,或者指向以前对类似问题的讨论吗?
scala - 如何隐式地getClass
我正在用方法签名在一些 Java 代码上编写 Scala 包装器,并且代码中的method(cl: Class[_], name: String)
许多 getClass 方法看起来并不好:
那么我们能以某种方式隐含地获得封闭类Creator.create("some name")
吗?
scala - 使用带有 PriorityQueue (Scala) 的隐式排序时遇到问题
我正在尝试创建一个包含其中的数据结构PriorityQueue
。我已经成功地制作了它的非通用版本。我可以说它有效,因为它解决了我遇到的 AI 问题。
这是它的一个片段:
我正在尝试使其通用,但如果我使用此版本,它将停止解决问题:
我也尝试过注释掉的内容而不是使用[T <% Ordered[T]]
这是调用的代码PQ
:
我也尝试过将隐式 def 移动到Node
对象中(并导入它),但本质上是同样的问题。
我在通用版本中做错了什么?我应该把隐式放在哪里?
解决方案
问题不在于我的隐含定义。问题是隐式排序被在语句Set
中自动生成的 a拾取。for(...) yield(...)
这导致产生的集合仅包含一个状态的问题。
c# - 使用 Mapper 与隐式运算符有什么优势吗?
映射器自动映射:
隐式运算符:
scala - 隐式参数不起作用
假设我有以下 scala 代码:
上面的代码编译得很好,但是当我将最后一行(对象测试中的方法“值”的主体)更改为
编译器抱怨找不到参数 F0 的隐式值:ValueSource[A]
在我看来,def value[A: ValueSource] 意味着我有一个隐含的值“ValueSource[A]”,那么为什么编译会失败呢?
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
是合适的类型呢?编译器是否能够解析多个依赖隐式,如果不能,为什么会显示这个错误?
c++ - 编译器不定义隐式的条件(构造函数、析构函数、复制构造函数、复制赋值)
这应该是一个微不足道的问题,但我无法在 stackoverflow 上明确找到它。
如果用户未提供以下内容,则将隐含定义。
- 默认(无参数)构造函数
- 复制构造函数
- 复制赋值运算符
- 析构函数
但是我在某处读过(我现在似乎找不到),在某些情况下编译器不会隐式实现它们。
这些条件是什么?
scala - Scala 隐式上下文解析
我在 SLS 中找到了隐含解析的规则:
如果 T 是复合类型 T1 与 ... 与 Tn,T1、...、Tn 的各部分的并集,以及 T 本身
如果 T 是参数化类型 S[T1, ..., Tn],则 S 和 T1, ..., Tn 各部分的并集
如果 T 是单例类型 p.type,则 p 的类型的部分
如果 T 是类型投影 S#U,则 S 的部分以及 T 本身
在所有其他情况下,只有 T 本身
下面的示例是基于规则 4 的隐式解析吗?
谢谢
兹拉亚
scala - 尝试使用 sortBy 对元组列表进行排序
在我的 scala eclipse 工作表中,我这样做:
我不明白为什么 sortBy 函数会给出<error>
或如何找到有关它的更多信息。
当我将相同的代码放入 scala 类时,我得到:
我看到其他线程出现此错误。但它们是不同的情况。
任何帮助表示赞赏