显然是标题中的 scala 新手(使用 2.12.1 版(。我正在 IntelliJ 中编写我的第一个应用程序。我已经读过关于Java中的Scala等价物到this
。我已经尝试了this
,self
,classOf[]
和IntelliJ正在抱怨,即使我忽略IntelliJ,代码也没有编译。这是我所拥有的:
import ch.qos.logback.classic.Logger
object Main extends App {
val logger = Logger[Main]
}
记录器包在 SBT 中正确导入。但是,它无法解析符号Main
。我尝试将其粘贴在包装中以使其不那么普遍,然后做类似Logger[me.justin.Main]
的事情,但这也不起作用。
我还认为扩展应用程序可能会导致一些问题,但我认为这在我使用的 scala 版本中已修复?也许它甚至不适用?
我都被谷歌搜索出来了。请帮忙!
你被 Scala 对象的工作方式绊倒了。假设我们有一个类Foo
和一个相同的伴随对象:
class Foo
object Foo
如果我们想要一个类的记录器,我们会做显而易见的事情:
val logger = Logger[Foo] // `Foo` here is the type of the class.
但是,如果我们想引用对象的类型呢?我们必须消除类类型的歧义。答案是在对象上使用特殊的type
成员:
val logger = Logger[Foo.type] // `Foo.type` here is the type of the object.
所以在你的情况下:
val logger = Logger[Main.type]