Scala'this'和'self'无法在简单的应用程序中工作

时间:2017-07-18 22:39:06

标签: scala intellij-idea

scala的新功能(使用版本2.12.1)显然来自标题。我正在用IntelliJ编写我的第一个应用程序。我已经阅读了Java中与Scala等效的this。我已经尝试thisselfclassOf[]并且IntelliJ正在抱怨,即使我忽略了IntelliJ,代码也没有编译。这就是我所拥有的:

import ch.qos.logback.classic.Logger

object Main extends App {
  val logger = Logger[Main] 
}

记录器包正在SBT中正确导入。但是它无法解析符号Main。我尝试将其粘贴在一个软件包中以使其不那么普遍,然后执行类似Logger[me.justin.Main]的操作,但这也不起作用。

我也认为可能扩展App会导致一些问题,但我认为这已经修复了我正在使用的scala版本?也许它甚至不适用?

我全都用Google搜索了。请帮忙!

1 个答案:

答案 0 :(得分:1)

您可能会因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]