问题标签 [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 投票
1 回答
191 浏览

scala - 为什么scala编译器在重载并且具有泛型类型参数时找不到隐式参数值/转换?

斯卡拉 2.8.1

采用以下类层次结构

send为什么scala编译器在发送B下面的实例时找不到隐式参数

为什么当泛型版本被重命名时,编译器能够找到隐式参数的值routingKeyFor

0 投票
2 回答
173 浏览

scala - Scala中的隐式转换问题

我正在改进 Querydsl 中的 Scala 支持,但遇到了以下问题。这是一个说明问题的代码片段:

除了类型参数之外,如何在隐式转换中匹配类型。我可以单独匹配,但不能同时匹配。

0 投票
2 回答
453 浏览

scala - Scala 收藏中的森林砍伐

从 Scala 集合的设计中,我了解到类似:

不构建中间数据结构:新 Set 是在使用 Builder 迭代 BitSet 时构建的。事实上,在这种情况下,这是显而易见的,因为一组字符串没有意义。

列表中的地图呢?我很确定以下内容会构建一个中间列表:

即列表List((1,foo), (2,foo), (3,foo))。如果没有,那怎么办?现在,下面的呢?

这一次,从我似乎理解的类型来看++

认为可能是地图是动态构建的,并且没有构建中间列表。

是这样吗?如果是,这是确保森林砍伐的规范方法还是有更直接的语法?

0 投票
5 回答
7267 浏览

scala - Scala 依赖注入:隐式参数的替代方案

请原谅这个问题的长度。

我经常需要在代码的一层创建一些上下文信息,并在其他地方使用这些信息。我通常发现自己使用隐式参数:

这可行,但需要大量传递隐式参数,在干预函数布局后污染层的方法签名,即使他们自己不关心它。

我觉得这种方法很难看,但它确实有一个优点:它是类型安全的。我确定mog会收到正确类型的上下文对象,否则它不会编译。

如果我可以使用某种形式的“依赖注入”来定位相关上下文,它将减轻混乱。引号表明这与 Scala 中常见的依赖注入模式不同。

起点foo和终点mog可能存在于系统的不同层次。例如,foo可能是用户登录控制器,并且mog可能正在执行 SQL 访问。可能有很多用户同时登录,但 SQL 层只有一个实例。每次mog由不同的用户调用,都需要不同的上下文。所以上下文不能被烘焙到接收对象中,你也不想以任何方式合并两个层(如蛋糕模式)。我也不想依赖像 Guice 或 Spring 这样的 DI/IoC 库。我发现它们很重,不太适合 Scala。

所以我认为我需要的是可以mog在运行时为它检索正确的上下文对象的东西,有点像ThreadLocal里面有一个堆栈:

但是一旦异步参与者参与到链中的任何地方,这种情况就会下降。你使用哪个actor库无关紧要,如果代码在不同的线程上运行,那么它会丢失ThreadLocal.

那么......我错过了一个技巧吗?一种在 Scala 中上下文传递信息的方法,它不会污染干预方法签名,不会静态地将上下文烘焙到接收器中,并且仍然是类型安全的?

0 投票
3 回答
1762 浏览

scala - 在 Scala 中,我如何告诉抽象基类类型参数 T 支持从 Int(或 Float,或...)进行隐式转换?

我很难从 C++/模板世界过渡到 scala。我习惯于对我想要的模板参数 T 使用任何操作,只要我用来实例化 T 的任何东西都支持这些操作(基本上是编译时 Duck 类型)。我在 Scala 中找不到相应的习惯用法,它允许我定义一个具有单个类型参数的抽象类,并且它需要类型 T 的某个接口。

我几乎可以工作,但我无法弄清楚如何告诉抽象类(Texture[T <: Summable[T]])T 支持从 Int 进行转换/构造。如何将隐式转换添加到特征 Summable 以便 Texture 知道 T 支持转换?

0 投票
3 回答
1245 浏览

scala - Scala 命名参数和默认参数以及隐式参数

考虑以下:

最后一个表达式导致以下错误:

但是,如果您为隐式参数 a 提供默认值,则没有问题:

但最后一行打印

虽然我会预料到

所以隐含值's'没有被拾取。如果您不向 f 提供任何参数而只是调用

然后隐式值被拾取,你得到

有人可以阐明这里发生了什么吗?

0 投票
6 回答
1371 浏览

java - 如何将工厂方法添加到 Scala 中的现有 Java 类

在纯 Scala 环境中,如果我想将工厂方法“添加”到现有对象,我可以执行以下操作:

我需要这样的功能与现有的 Java 类相结合。在我的具体示例中,我想在类中添加一个工厂方法fromLocationcom.google.android.maps.GeoPoint我想每个 Android 开发人员都会知道为什么这会有用 ;-))。

但是,如果我尝试做类似的事情

我收到一条错误消息

类型不匹配; 找到:com.google.android.maps.GeoPoint.type(带有底层类型对象 com.google.android.maps.GeoPoint) 需要:AnyRef

所以我想知道是否有任何方法可以实现上述方法 - 或者提供隐式转换 from LocationtoGeoPoint是 Scala 中的首选方式,以便在Location需要时可以使用 a GeoPoint


根据评论中的要求,使用场景:

但是,请记住,这只是一般问题的一个具体示例;-)

0 投票
1 回答
315 浏览

scala - Scala 中的方法与函数和隐式

让我们将 def 和等效函数声明为 val:

现在为什么这不起作用?

而这两个呢?

由于 Option 不是 GenTraversableOnce 的子类型,我认为这一定与隐式有关,但我无法弄清楚它到底是什么。我正在使用 Scala 2.9.1。

0 投票
2 回答
1114 浏览

scala - 伴随对象中的Scala隐式Numeric [T]

我有以下通用 Interval 类(由用户 soc 为我制定):

典型用例:Interval[Double] 或 Interval[Int]。为了添加二元联合交集(implicit num: Numeric[T])运算符,我在伴随对象中遵循了类似的模式:

在这两种方法中复制(implicit num: Numeric[T])and是丑陋的样板。import num.mkOrderingOps有没有办法在 Interval 对象本身的级别上只做一次?

0 投票
5 回答
443 浏览

scala - 在语句中混合 Scala Option 和常规变量

我想编写透明地混合 Scala 选项和常规变量的条件语句。例如:

我当然可以写

但我更喜欢更简洁的语法。

有什么提示吗?我应该用运算符扩展“选项”,还是使用隐式、范畴论或其他?

编辑:更正声明。