[英]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.