从我导入对象时可访问的其他对象隐式

时间:2016-01-06 20:58:51

标签: scala import implicit

当有人导入我的对象时,我希望其他对象(或包)中的一些隐式类可供他们使用。在对象中使用import没有帮助,因为导入不是传递导入的,因此我假设我必须使用一些implicit defval,但是我无法找到一些合理的方法如何实现这一点,只有一个相当冗长的def

object Main extends App {

  object A {

    implicit class ExtendedMath(val x: Double) extends AnyVal {
      def square = x * x
    }

  }

  object X {

    import A._

    // what to write here, so that ExtendedMath is forwarded to our users?
    // following works, but it seems quite verbose
    implicit def extendedMath(x: Double): ExtendedMath = ExtendedMath(x)
  }


  import X._
  val a = 0.0
  println(a.square)
}

有更简洁的方法吗?

1 个答案:

答案 0 :(得分:2)

正如@stew建议的那样,典型的方法是定义特征中的含义,然后可以多次混合。唯一需要注意的是,在特征中不允许使用值类,因此您必须使用分离值类和隐式转换:

#define GL_GLEXT_PROTOTYPES
#include <GLES2/gl2ext.h>