debugging 我可以打印一个传递给Scala中类函数的case类参数吗?

svujldwt  于 2022-11-14  发布在  Scala
关注(0)|答案(1)|浏览(124)

我正在尝试打印一个传递给scala中的类函数的对象。
case类编写如下:

config {
...
case class NetConfig(
      domain: NetDomain,
      prodDomain: NetDomain,
      @ConfigName("base_url") baseUrl: BaseUrl,
      @ConfigName("asset.domain") assetDomain: AssetDomain,
      @ConfigName("asset.base_url") assetBaseUrl: AssetBaseUrl,
      @ConfigName("asset.minified") minifiedAssets: Boolean,
      @ConfigName("stage.banner") stageBanner: Boolean,
      @ConfigName("socket.domains") socketDomains: List[String],
      crawlable: Boolean,
      @ConfigName("ratelimit") rateLimit: RateLimit,
      email: EmailAddress
  ) {
    def isProd = domain == prodDomain
  }
...
}

类函数编写如下:

import ....config.NetConfig
final class CSRFRequestHandler(net: NetConfig) {
...
}

我希望在调用此处理程序时查看NetConfig的所有成员的值。我尝试了以下几种方法:

final class CSRFRequestHandler(net: NetConfig) {
println(NetConfig)
(I just got the word NetConfig)

or

println(NetCConfig.domain)
(got compile error value domain is not a member of object lila.common.config.NetConfig)

or NetConfig.show
(got the word NetConfig)

FYI我们使用的是Play框架。我不知道scala的名称。打印NetConfig的所有值的正确方法是什么?

2lpgd968

2lpgd9681#

case class es的优点之一是它们提供了一个根据主构造函数的参数定制的开箱即用的toString

case class Person(name: String, age: Int, birthplace: String)

在常规类中的其他differences中,您可以将其视为带有以下重写toString的普通class

class Person(val name: String, val age: Int, val birthplace: String) {

    // ... other case class methods

    override def toString: String =
      s"${getClass.getSimpleName}($name,${age.toString},$birthplace)"
  }

这是有意的,以便您可以查看Person的每个示例的String表示:

val p = new Person("Hikaru", 25, "Tokyo")
  println(p) // both will print: Person(Hikaru,25,Tokyo)

而没有覆盖toString的普通类将输出如下内容:

<OuterClassWithFullPath>$Person@<hashCode>

因此,在您的示例中,由于net已经是NetConfig类型的对象,而NetConfig类型已经是case class,因此只需一个简单的println(net)即可。
编辑:为了避免混淆类型和变量,除了类型在前,然后是变量名(这是有意的,这样有时可以省略类型,例如:val myNumber = 10),请记住Scala中的naming convention与Java中的naming convention相同:类或特征应该总是以大写 Camel 形式命名,而值和变量名称应该是小写 Camel 形式名称,除非它们是常量

相关问题