簡體   English   中英

我可以打印一個案例 class 參數,該參數傳遞給 class function 中的 Z3012DCFF1477E1BBBAAB817645Z7 嗎?

[英]Can I print a case class param that is passed to class function in Scala?

我正在嘗試打印一個 object 傳遞給 class function 在 ZBAAD2C48E66FBC14C61337D0221 中。

案例 class 寫成:

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
  }
...
}

class function 是這樣寫的:

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)

僅供參考,我們正在使用 Play 框架。 而且我不知道 scala 嘆息。 打印 NetConfig 的所有值的正確方法是什么?

case class es 的優點之一是它們提供了一個開箱即用的toString ,針對其主要構造函數的 arguments 量身定制。 例如,這個:

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

除了與常規類的其他區別之外,您可以將其視為普通的class並重寫以下toString

  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的普通 class 將打印如下內容:

<OuterClassWithFullPath>$Person@<hashCode>

因此,在您的情況下,由於net已經是NetConfig類型的 object ,這已經是case class ,因此只需一個簡單的println(net)即可。

編輯:為了避免將類型與變量混淆,除了首先是類型,然后是變量名稱(這是故意的,因此您有時可以省略類型,例如: val myNumber = 10 ),請記住命名約定在 Scala 中與 Java 中的相同:類或特征應始終以大寫字母命名,而值和變量名稱應以小寫字母命名,除非它們是常量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM