2017-07-18 29 views
0

新工作,斯卡拉(使用版本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]但也不能正常工作。

我也想也许扩展应用是造成了一些问题,但我认为这固定我使用Scala的版本?也许它甚至不适用?

我所有的谷歌搜索出来。请帮助!

+0

是什么'?App' –

+0

这是一个scala特性,允许你使'Main'对象可以运行。基本上说这个对象有一个像java这样的主要方法。 – Justin

回答

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] 
+0

谢谢!要去了解一个班级和一个对象的差异。 – Justin