首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在方法调用后添加括号会导致“无法解析符号”?

为什么在方法调用后添加括号会导致“无法解析符号”?
EN

Stack Overflow用户
提问于 2019-08-15 15:59:09
回答 1查看 145关注 0票数 1

我试图使用PureConfig加载一个类型安全的配置。

以下代码编译得很好:

代码语言:javascript
复制
case class MyConfig(ex1: Boolean, ex2: String)

object HelloWorld {
  def main(args: Array[String]): Unit = {
    println(pureconfig.loadConfig[MyConfig])
  }
}

但这并不意味着:

代码语言:javascript
复制
case class MyConfig(ex1: Boolean, ex2: String)

object HelloWorld {
  def main(args: Array[String]): Unit = {
    // note the additional parentheses
    println(pureconfig.loadConfig[MyConfig]())
  }
}

其结果是“无法解析符号”。

这是方法签名:

代码语言:javascript
复制
def loadConfig[Config](implicit reader : pureconfig.Derivation[pureconfig.ConfigReader[Config]]) 
  : scala.Either[pureconfig.error.ConfigReaderFailures, Config]

我在乎,因为我想这样做:

代码语言:javascript
复制
import scala.reflect.io.Path
// ...
val path = Path.string2path("/home/test/test.conf")
println(pureconfig.loadConfig[MyConfig](path))

希望解决这个签名:

代码语言:javascript
复制
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”。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-16 12:50:55

我导入了错误的类型,scala.reflect.io.PathloadConfig方法签名需要scala.reflect.io.Path。此代码适用于:

代码语言:javascript
复制
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))
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57512574

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档