我正在嘗試列印一個傳遞給 scala 中的類函式的物件。
案例類是這樣寫的:
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)
僅供參考,我們正在使用 Play 框架。我不知道斯卡拉嘆息。列印 NetConfig 的所有值的正確方法是什么?
uj5u.com熱心網友回復:
es的優點之一是它們提供了針對其主要建構式的引數量身定制case class
的開箱即用。toString
例如,這個:
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)"
}
這是有意的,以便您可以查看 aString
的每個實體的表示Person
:
val p = new Person("Hikaru", 25, "Tokyo")
println(p) // both will print: Person(Hikaru,25,Tokyo)
而沒有toString
被覆寫的普通類會列印如下內容:
<OuterClassWithFullPath>$Person@<hashCode>
因此,在您的情況下,因為net
is 已經是NetConfig
型別的物件,它已經是 a ,所以應該做case class
一個簡單的事情。println(net)
編輯:為了避免將型別與變數混淆,除了型別首先出現,然后是變數名(這是故意的,因此您有時可以省略型別,例如:)val myNumber = 10
,請記住 Scala 中的命名約定是與 Java 相同:類或特征應始終以駝峰大寫命名,而值和變數名稱應以駝峰小寫命名,除非它們是常量。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/508581.html