我正在尝试打印一个传递给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的所有值的正确方法是什么?
1条答案
按热度按时间2lpgd9681#
case class
es的优点之一是它们提供了一个根据主构造函数的参数定制的开箱即用的toString
。在常规类中的其他differences中,您可以将其视为带有以下重写
toString
的普通class
:这是有意的,以便您可以查看
Person
的每个示例的String
表示:而没有覆盖
toString
的普通类将输出如下内容:因此,在您的示例中,由于
net
已经是NetConfig
类型的对象,而NetConfig
类型已经是case class
,因此只需一个简单的println(net)
即可。编辑:为了避免混淆类型和变量,除了类型在前,然后是变量名(这是有意的,这样有时可以省略类型,例如:
val myNumber = 10
),请记住Scala中的naming convention与Java中的naming convention相同:类或特征应该总是以大写 Camel 形式命名,而值和变量名称应该是小写 Camel 形式名称,除非它们是常量