我试图使用PureConfig加载一个类型安全的配置。
以下代码编译得很好:
case class MyConfig(ex1: Boolean, ex2: String)
object HelloWorld {
def main(args: Array[String]): Unit = {
println(pureconfig.loadConfig[MyConfig])
}
}但这并不意味着:
case class MyConfig(ex1: Boolean, ex2: String)
object HelloWorld {
def main(args: Array[String]): Unit = {
// note the additional parentheses
println(pureconfig.loadConfig[MyConfig]())
}
}其结果是“无法解析符号”。
这是方法签名:
def loadConfig[Config](implicit reader : pureconfig.Derivation[pureconfig.ConfigReader[Config]])
: scala.Either[pureconfig.error.ConfigReaderFailures, Config]我在乎,因为我想这样做:
import scala.reflect.io.Path
// ...
val path = Path.string2path("/home/test/test.conf")
println(pureconfig.loadConfig[MyConfig](path))希望解决这个签名:
def loadConfig[Config](path : java.nio.file.Path)(implicit reader : pureconfig.Derivation[pureconfig.ConfigReader[Config]])
: scala.Either[pureconfig.error.ConfigReaderFailures, Config]但这也会导致“无法解决符号”错误。
我来自C#,所以我可能遗漏了一些显而易见的东西。
Update:正如@Luis评论的那样,第一个示例失败了,“因为您试图调用默认加载程序,该加载程序不接受任何显式参数,但它确实有一些关联,当您添加空括号时,您将告诉编译器您将显式添加隐式参数,而您没有”。
第二个示例(传递path)无法使用此错误进行编译:
错误:(8,34)重载方法值loadConfig: (conf: com.typesafe.config.Config,命名空间:String)(隐式读取器: pureconfig.Derivation[pureconfig.ConfigReaderMyConfig])Eitherpureconfig.error.ConfigReaderFailures,MyConfig(implicit阅读器: pureconfig.Derivation[pureconfig.ConfigReaderMyConfig])Eitherpureconfig.error.ConfigReaderFailures,MyConfig(implicit阅读器: pureconfig.Derivation[pureconfig.ConfigReaderMyConfig])Eitherpureconfig.error.ConfigReaderFailures,MyConfig(implicit阅读器: pureconfig.Derivation[pureconfig.ConfigReaderMyConfig])Eitherpureconfig.error.ConfigReaderFailures,MyConfig(implicit阅读器: pureconfig.Derivation[pureconfig.ConfigReaderMyConfig])Eitherpureconfig.error.ConfigReaderFailures,MyConfigEitherpureconfig.error.ConfigReaderFailures,MyConfig无法应用于(scala.reflect.io.Path) println(pureconfig.loadConfigMyConfig)
我觉得这个错误很难读懂。它似乎是列出了编译后认为我可能试图调用的方法。名单上的第四个是我想叫的那个。
Intellij的错误更简洁:“无法解决符号loadConfig”。
发布于 2019-08-16 12:50:55
我导入了错误的类型,scala.reflect.io.Path。loadConfig方法签名需要scala.reflect.io.Path。此代码适用于:
import java.nio.file.Paths
case class MyConfig(ex1: Boolean, ex2: String)
object HelloWorld {
def main(args: Array[String]): Unit = {
val path = Paths.get("/home/test/test.conf")
println(pureconfig.loadConfig[MyConfig](path))
}
}https://stackoverflow.com/questions/57512574
复制相似问题