问题标签 [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.
programming-languages - 其他支持隐含“a la Scala”的编程语言
Scala 隐式非常强大。我很好奇它们是 Scala 的新/独特功能,还是其他编程语言中已经存在的概念。
谢谢。
编辑:
为了澄清我的问题,是的,我正在谈论这个具体的实现。一开始,到处都是“隐含的东西”似乎很奇怪,但是使用了一段时间并看到其他人如何使用它,我对它的工作效果印象深刻。
scala - “不能对参数化类型进行存在抽象......”
我为了好玩而在 Scala 2.8 上乱搞,并试图定义一个皮条客,它为类型构造函数添加一个“as”方法,允许从一个函子转换为另一个函子(请忽略我不一定在这里处理函子的事实) . 因此,例如,您可以像这样使用它:
所以这就是我试图做的:
但是, 的定义naturalTransformations
被标记为错误"can't existentially abstract over parameterized type G[T]"。为了解决这个问题,我可以像这样重写naturalTransformations
一个额外的类Transformable
:
它似乎有效。但似乎我的第一次尝试应该是等效的,所以我很好奇它为什么失败以及错误消息的含义。
scala - Scala 中的类型类
拥有 Haskell 的背景,我目前正在尝试熟悉 Scala。
我在尝试将一种小型的、可扩展的表达式语言从 Haskell 翻译成 Scala 时遇到了一些问题。编写可使用新数据变体和操作扩展的数据类型的基本问题通常称为表达式问题。
我在 Haskell 中的原始解决方案使用类型类和带有约束的实例声明。我的表达式的基础定义如下:
然后,我有一个添加乘法的数据扩展:
让我们以漂亮的打印机作为操作扩展:
最后,在第四个模块中,可以组合两个独立的扩展:
现在我的问题是:通常来自 haskell 的类型类被转换为 Scala 中隐含的概念模式。这是我走了多远:
在这里,我坚持为 Plus 实现隐式对象。如何声明具有类型参数和约束的隐式对象?
我知道 Scala 中的表达式问题还有其他解决方案,但是我对这个版本特别感兴趣。
感谢大家阅读我有点冗长的问题。
scala - 找不到参数排序的隐式值
尝试编译时出现以下错误:
Btree.scala:9:错误:找不到参数排序的隐式值:Ordering[K] 抽象类 Node[K,V] 扩展 TreeMap[K,V]
TreeMap 应该接受我提供的隐式 Ordering[A] val。也许隐式参数需要在实例化 Btree(TreeMap) 的对象 Tester 中?我更愿意将隐式声明保留在 Btree 类中,因为我希望 Ordering 有一个实现 Comparable[K] 的类型 K。说得通?
scala - 什么是“隐式”的 Scala 标识符?
我implicitly
在 Scala 示例中看到了一个名为 used 的函数。它是什么,它是如何使用的?
请注意,我们必须编写implicitly[Foo[A]].apply(x)
,因为编译器认为这 implicitly[Foo[A]](x)
意味着我们implicitly
使用参数调用。
scala - Scala编译器说我的方法是递归的,以防使用隐式和匿名类
我希望能够编写类似的代码
所以我想我可以用隐式来做到这一点。
当我在 Scala REPL 中执行以下代码时,它被正确定义
但是,当我尝试编译时,
它失败并出现错误
有什么区别?我究竟做错了什么?
scala - 什么是 Scala 上下文和视图边界?
简单来说,什么是上下文和视图边界,它们之间有什么区别?
一些易于理解的例子也很棒!
scala - 什么是发散隐式扩展错误?
在尝试解决另一个问题([1])时,我遇到了一个发散的隐式扩展错误。我正在寻找关于这意味着什么的解释
这是用例:
scala - 如何为隐式方法实现中间类型?
假设我想在我控制之外的foo
现有类型上提供方法。A
据我所知,在 Scala 中执行此操作的规范方法是实现从A
某种类型的隐式转换,该类型实现foo
. 现在我基本上看到了两种选择。
为此目的定义一个单独的,甚至可能是隐藏的类:
/li>定义一个匿名类内联:
/li>
变体 2) 的样板当然更少,尤其是在出现大量类型参数时。另一方面,我认为它应该会产生更多开销,因为(从概念上)每次转换创建一个类,而不是在 1) 中全局创建一个类。
有通用的指导方针吗?有没有区别,因为编译器/VM摆脱了2)的开销?
scala - 如何在 Scala 中链接隐式?
pimp-my-library 模式允许我通过提供从该类到实现该方法的隐式转换,来看似将方法添加到类。
但是,Scala 不允许发生两次这样的隐式转换,因此我无法A
使用C
隐式A
toB
和另一个隐式B
to C
。有没有办法绕过这个限制?