问题标签 [scala-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 回答
877 浏览

scala - 我如何以一种面向未来的方式使用 Scala “拉动我的库”?

我使用 Scala 隐式类来扩展我经常使用的对象。例如,我有一个类似于 Spark 上定义的方法DataFrame

但是如果类已经定义了相同的方法,则不会调用隐式定义。如果我稍后升级到定义DataFrame#deduplicate方法的新版本 Spark 会发生什么?客户端代码将默默地切换到新的实现,这可能会导致细微的错误(或明显的错误,问题较少)。

使用反射,如果在我的隐式定义之前已经定义,我可以抛出运行时错误。然后,理论上,如果我的隐式方法与现有方法冲突,我可以检测到它并重命名我的隐式版本。但是,一旦我升级 Spark、运行应用程序并检测到问题,使用 IDE 重命名旧方法为时已晚,因为现在对本机 Spark 版本的任何引用。我必须恢复我的 Spark 版本,通过 IDE 重命名方法,然后再次升级。不是世界末日,但不是一个伟大的工作流程。DataFramededuplicatedf.deduplicate

有没有更好的方法来处理这种情况?如何安全地使用“pimp my library”模式?

0 投票
2 回答
679 浏览

scala - 为什么隐式类中的函数不可用?

我正在尝试自学 Scala 并使用 IntelliJ IDEA 作为我的 IDE。我已经启动了 IntelliJ 的 sbt shell,运行console然后输入以下内容:

它在最后一行失败:

我已经从其他地方(我知道它可以工作)逐字复制了代码,所以我不知道为什么这不起作用。为什么我的隐式类中定义的函数不能作为 a 上的函数使用DataFrame

0 投票
1 回答
48 浏览

scala - 泛型函数中的隐式转换

我需要从 Any 转换为基本数字类型,如 Int 或 Double。我使用 Scala 隐式实现了这些转换。我的代码类似于这个:

问题是我需要在像这样的通用函数中进行这些转换:

这是调用doStuffAndConvert

但是,编译器会抛出此错误:

我试图通过包装 Int 和 Double 类型并限制T泛型类型来帮助编译器,但它没有用。

我该如何解决?

谢谢。

0 投票
2 回答
1382 浏览

scala - Typeclass 的模棱两可的隐含值

我正在尝试抽象出针对特定类型触发的 json 解析逻辑。

我开始创建 Parser 特征,如下所示:

我有一个名为 JsonParser 的特性的实现,它是:

JsonParserLike 定义如下:

当我尝试编译上述内容时,编译失败并显示:

不知道为什么隐式解析在这里失败。是因为特征中的parse方法Parser没有参数类型的参数T吗?

我尝试了另一种方法如下:

以上给了我以下错误:

编辑:从 REPL 添加会话