问题标签 [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 类型推断正常工作
总体目标:
例如,假设我想开发一个非常可插拔的问题跟踪器。它的核心实现可能只支持票证 ID 和描述。其他扩展可能会添加对各种其他字段的支持,但这些字段可能存在于同一表的数据库中。即使没有,对数据库的查询数量也不应该随着扩展数量的增加而增加。他们应该能够为查询的定义做出贡献。
Item[A, B, R[_]]
将表示一列,A
表类型(具有列表示)B
作为数据类型,并R
作为表示类型列的类型构造函数B
。例如,ScalaQueryR[B]
可能也是如此。NamedColumn[String]
现在我正在尝试创建一个类型类来处理构建“查询”。
问题:
以 val q 开头的行(在末尾)应该读起来很简单val q = query(items)
并且仍然可以编译。defaultNext
由于推断B0
和/或B
to ,各种尝试产生推断类型参数不符合预期类型参数Nothing
的错误,或“发散隐式扩展”错误或其他错误。我认为隐式错误是由不正确的类型推断触发的。
我已经在这上面浪费了好几天(这是我的一个开源项目),所以如果有人能帮忙,我真的很感激。
scala - scala中的隐式提升
我想将函数从隐式转换A => B
为List[A] => List[B]
.
我写了以下隐式定义:
不幸的是,当我编写以下代码时,未应用隐式:
如果我用明确的时间注释函数,它工作正常。
为什么?我该如何解决?
更新。似乎该问题特定于匿名函数。相比:
第一个编译得很好。第二个被标记为错误
scala - 安全链接隐式转换
您可以这样做以获取到链的隐式转换:
但这显然不安全。
不过,我看不出这个版本有什么问题:
这里有问题吗?
scala - 为什么没有找到平凡的隐含?
为什么没有找到隐式,即使在一些微不足道的事情中:
num
不会编译,无需手动传入data.sum
scala - Scala - 应用于隐式参数选择的 Co/Contra-Variance
我有这样的特点:
使用这样的功能:
目的是做这样的事情:
因此,对于环境已经知道如何折叠并且可以为 Ints、Strings 等定义的类型,它是一个类型类。
我的问题是我还希望有更具体的隐式优先,如下所示:
但是,该方法调用会产生冲突,因为存在歧义:
所以我想要的是让编译器在 Any 和我的类型之间搜索最具体的隐式。目的是为基类型提供默认实现,可以轻松地为更具体的子类型覆盖这些实现,而不会出现丑陋的阴影。
我可能在这里一厢情愿,但只能希望:-)
scala - 来自周围范围的隐式参数解析
我不喜欢将隐式参数带入我的代码中,所以我想在使用它们的地方封装它们的使用。因此,我试图定义一个对象,该对象既包含对 spray-json 的调用和异常处理,又包含我的每个模型类的默认隐式 JsonFormats。但是,除非将隐式参数导入客户端调用代码,否则不会解析隐式参数,这正是我不希望它们出现的地方。这是我到目前为止所拥有的(它不能解决隐式格式化程序),有没有一种方法可以获得我想要的工作?
注意。JsonFormat 是 JsonReader 的一种
编辑:这是我根据@paradigmatic 的第二个建议(我无法开始工作,我仍然得到Cannot find JsonReader or JsonFormat type class for T
)所写的内容。我错过了什么吗?
作为记录,这是一个确实有效的代码片段,但我试图避免它,因为它需要太多的客户端代码(即它需要在范围内具有隐式):
scala - Scala 隐式参数的 Groovy 等效项
是否有一些 Groovy 替代方法来表达如下内容:
更新:在此处查看后续问题:Groovy 等效于 Scala 隐式参数 - 扩展
scala - Scala 隐式参数的 Groovy 等效项 - 扩展
这个问题扩展了我之前对 Scala 隐式参数的 Groovy 等效项
不确定这是否是从以前的主题发展的正确方法,但无论如何..
我正在寻找一种用 groovy 表达的方式,如下所示:
一般来说,我想执行一段逻辑,并根据执行“上下文”解析其中的变量。使用 scala 中的隐式,我似乎能够控制这种情况。我正在尝试找到一种在 groovy 中做类似事情的方法。
根据第一个问题的反馈,我尝试这样处理:
现在,我在http://groovy.codehaus.org/Closures+-+Formal+Definition浏览了 groovy 闭包定义
据我了解,当调用 getter 时,失败发生为“编译器无法静态确定‘值’可用”
那么,有人对这种情况有什么建议吗?干杯
scala - Scala 视图应用程序谜题
假设我们有以下两个特征:
以及从第二个到第一个的隐式转换:
我们创建一个Bar
和一个整数列表:
现在我希望以下工作:
但它没有:
所以我们去规范,它有这样的说法(粗体强调的是我的):
视图适用于三种情况。
[这里不相关。]
在类型为T的e选择em中,如果选择器m不表示T的成员。在这种情况下,搜索适用于e并且其结果包含名为m的成员的视图v。搜索与隐式参数的情况一样进行,其中隐式范围是T之一。如果找到这样的视图,则将选择em转换为v(e).m。
在类型为T的e的选择em(args)中,如果选择器m表示 T 的某些成员,但这些成员都不适用于参数args。在这种情况下,搜索适用于e并且其结果包含 适用于args的方法m的视图v。搜索与隐式参数的情况一样进行,其中隐式范围是T之一。如果找到这样的视图,则选择em将转换为 v(e).m(args)。
所以我们尝试以下方法,认为它一定太荒谬了:
但它确实(至少在 2.9.2 和 2.10.0-RC2 上):
我有三个(密切相关的)问题:
- 是否有一种直接的方法(即,不涉及添加具有适当名称的假方法)在上述原始案例中正确应用视图?
- 有人可以提供解释这种行为的规范吗?
- 假设这是预期的行为,它是否有任何意义?
我也很感谢以前讨论过这个问题的任何链接——我对谷歌的运气并不好。
scala - 如何能够在Scala中以递归方式应用隐式转换
我正在尝试编写一个转换库,用于将一些 scala 类型转换为 HTML 表示。List(1,2).toHtml
比如说,我想<ul><li>1</li><li>2</li></ul>
以String
.
到目前为止,我已经编写了一组隐式转换,它们在检测结果类型和应用正确的toHtml
.
让我展示一个示例:
使用此代码,每当我询问编译器时,List(1,2).toHtml
我都会得到正确的转换。就像任何其他Iterable
val 一样。
我的问题和问题是我如何递归地使用这个 toHtml 转换?因为如果我键入List( List(1,2), List(3,4) ).toHtml
我想要得到<ul> <li><ul><li>1</li><li>2</li></ul></li> <li><ul><li>3</li><li>4</li></ul></li> </ul>
的,toHtml
转换会递归地应用于输入的每个元素Iterable
。
我试图将toHtml
定义更改为def toHtml = <ul> { l.map{ e => <li>{ e.toHtml }</li> } } </ul> toString
不起作用,因为编译器告诉我value toHtml is not a member of type parameter A
这是完全合理的。
我知道我的问题可能在于new Object { ... }
我从fromIterable[A]
隐式定义返回,这可能应该返回一个具有特征或其他东西的类。
我已经尝试阅读很多关于隐式的内容,但我还没有弄清楚能够递归地应用这种toHtml
转换,而无需取消参数化 fromIterable 签名并定义几个特定情况,例如fromIterable(l : List[List[Any]])
或类似的东西......
你们能否请我给我一些关于如何实现它的建议以及我做错了什么?
谢谢!