【问题标题】:Scala 'this' and 'self' not working in simple AppScala 'this' 和 'self' 在简单的应用程序中不起作用
【发布时间】:2017-07-19 07:19:24
【问题描述】:

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

import ch.qos.logback.classic.Logger

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

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

我还认为扩展 App 可能会导致一些问题,但我认为这已在我使用的 scala 版本中得到解决?也许它甚至不适用?

我都用谷歌搜索了。请帮忙!

【问题讨论】:

  • 什么是App??
  • 这是一个 scala 特征,允许您使 Main 对象可运行。基本上是说这个对象有一个类似于 java 的 main 方法。

标签: scala intellij-idea


【解决方案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]

【讨论】:

  • 谢谢!将不得不阅读类和对象的差异。
猜你喜欢
  • 2012-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-22
相关资源
最近更新 更多