首页 > 解决方案 > 我可以像对象一样在包之间引入隐式优先关系吗?

问题描述

我想知道如何在多个包中有效地放置相同的隐式转换,以便导入一个包的内容就足够了,但导入所有包不会引入冲突。无论您对上述想法有何看法(我可以猜到),这几乎是可能的:

    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
    }

这里需要注意的是范围syntaxextension必须是objectspackage objects不会工作,我完全不知道我什至可以在 Scala 3 中尝试什么。我可以以某种方式使用syntaxexpansion标识符作为正常范围,包含正常的“非内部”类吗?我能想到的唯一方法是

现在,我可以仅依靠另一个“比”更具体的隐式优先规则来使其工作,但它有一些缺点,例如即使在 Scala 3 中也需要 Scala 2 样式的伪扩展方法。因此我想知道是否在尝试利用以前的规则时,我没有考虑过一些事情。

标签: scalaimplicit

解决方案


推荐阅读