scala - 我可以像对象一样在包之间引入隐式优先关系吗?
问题描述
我想知道如何在多个包中有效地放置相同的隐式转换,以便导入一个包的内容就足够了,但导入所有包不会引入冲突。无论您对上述想法有何看法(我可以猜到),这几乎是可能的:
trait syntax
object syntax {
implicit class syntaxIntExtension(a :Int) {
def times2 = a * 2
def times3 = a * 3
}
}
trait extension extends syntax
object extension {
implicit class dialectIntExtension(a :Int) extends syntax.syntaxIntExtension(a) {
override def times2 = a + a
def times4 = a.times2.times2
}
}
object lazyUser {
import syntax._
import extension._
1.times2
1.times3
1.times4
}
这里需要注意的是范围syntax
和extension
必须是objects
;package objects
不会工作,我完全不知道我什至可以在 Scala 3 中尝试什么。我可以以某种方式使用syntax
和expansion
标识符作为正常范围,包含正常的“非内部”类吗?我能想到的唯一方法是
- 拥有
syntaximpl
and , 并用 type aliases 和sextensionimpl
填充syntax
到extension
边缘。val
我不喜欢。 - 将我想要的所有内容声明为某些 wrapper
trait
的内部类型,syntax
并extension
通过混合一长串此类包装器来组合。啊。
现在,我可以仅依靠另一个“比”更具体的隐式优先规则来使其工作,但它有一些缺点,例如即使在 Scala 3 中也需要 Scala 2 样式的伪扩展方法。因此我想知道是否在尝试利用以前的规则时,我没有考虑过一些事情。
解决方案
推荐阅读
- c++ - Clang 错误 - 致命错误:未找到“unistd.h”文件
- textx - 如何从一行文本中解析关键字和字符串
- python - python 3.9.5 中的诅咒在哪里?
- r - 我想检查其对应行的每个单元格中是否存在像 ABCD 这样的字符串。如果不存在,则应返回 NA
- reactjs - CheckBox 值始终返回 true
- r - 如何在 RMarkdown 中将此表移动到左侧?
- c++ - C++ 类菜单和控制器
- javascript - 反转“order_successful”,尽管发送了参数,但没有找到任何参数。DJANGO
- android - 预打包的数据库具有无效的架构列顺序
- c# - 表格标题单元格有一条分隔线,其他标题不会改变它们的高度