Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
scala:在隐式类中定义的导入函数_Scala_Implicit - Fatal编程技术网

scala:在隐式类中定义的导入函数

scala:在隐式类中定义的导入函数,scala,implicit,Scala,Implicit,我想将静态实用程序附加到那些扩展了名为Application的特性的类 trait Application { def name: String } case class TestApp(name: String) extends Application object ImplicitConf { implicit class AppConfig[T <: Application](val app: T) { lazy val conf = loadConfig

我想将静态实用程序附加到那些扩展了名为Application的特性的类

trait Application {
    def name: String
}

case class TestApp(name: String) extends Application


object ImplicitConf {
  implicit class AppConfig[T <: Application](val app: T) {

    lazy val conf = loadConfig

    def loadConfig = {
      ConfigFactory.load(app.name)
    }

    def getString(path: String): String = conf.getString(path)
  }
}
但我太贪心了,我该怎么隐藏电话

val test = app.getString("hello")
进入


您可以显式地将app:Application转换为appWithConfig:AppConfig,并导入appWithConfig:AppConfig的所有方法

   val appWithConfig = new AppConfig(app)
   import appWithConfig._

您可以显式地将app:Application转换为appWithConfig:AppConfig,并导入appWithConfig:AppConfig的所有方法

   val appWithConfig = new AppConfig(app)
   import appWithConfig._

我最好的选择是引用父对象中的方法:

object ImplicitConf {

  def getString[T <: Application](str: String)(implicit app: T) = AppConfig(app).getString(str)

  implicit class AppConfig[T <: Application](val app: T) {

    @transient lazy val conf = loadConfig


    def loadConfig = {
      ConfigFactory.load(app.name)
    }

    def getString(path: String): String = conf.getString(path)

  }
}

我最好的选择是引用父对象中的方法:

object ImplicitConf {

  def getString[T <: Application](str: String)(implicit app: T) = AppConfig(app).getString(str)

  implicit class AppConfig[T <: Application](val app: T) {

    @transient lazy val conf = loadConfig


    def loadConfig = {
      ConfigFactory.load(app.name)
    }

    def getString(path: String): String = conf.getString(path)

  }
}

您可以从应用程序导入所有内容。导入应用程序。\u抱歉,此评论与隐式无关。您可以从应用程序导入所有内容。导入应用程序。\u抱歉,该评论与implicitthanks的响应无关。正如我在文章中提到的,我想通过使用隐式类将静态实用程序附加到应用程序特性来扩展我的应用程序特性。这与我的特定需求无关,尤其是当我不希望多个配置对象的实例停留在我的周围时。对象TestAppConf使用应用程序{override val name=“TestAppConf”val test=this.getString(“hello”)println(s“配置值为$test”)}扩展应用程序。感谢您的响应。正如我在文章中提到的,我想通过使用隐式类将静态实用程序附加到应用程序特性来扩展我的应用程序特性。这与我的特定需求无关,尤其是当我不希望多个配置对象的实例停留在我的周围时。对象TestAppConf使用应用程序{override val name=“TestAppConf”val test=this.getString(“hello”)println(s“配置值为$test”)}扩展应用程序
object TestAppConf extends App {

  implicit val app: Application = TestApp("TestAppConf")

  val test = getString("hello")

  println(s"The Config value is $test")

}