【问题标题】:Scala objects as scopeScala 对象作为作用域
【发布时间】:2013-09-11 05:18:15
【问题描述】:

我是 scala 的新手,这里有个问题:

object Models {

  class A1 { // some methods }

  class A2 { // some methods }
}

此代码有效,模型似乎被视为某种范围单元 - 我可以在需要的任何地方导入它。这是正常的做法吗?我可以将其用作确定软件包部分范围的方法吗?似乎还有一个包对象,我猜它的行为类似。我应该知道这种方法有什么问题吗?

【问题讨论】:

  • 是的,我们可以!以前的 pkg 对象问题已得到修复。请参阅此答案stackoverflow.com/a/17276060/1296806。有时包含对象的外部 ptrs 是一个问题。
  • 从历史上看,issues.scala-lang.org/browse/SI-1987 有时包对象的存在仍然会阻碍重新编译。我会说 PO 最好按预期使用。最后,请回想一下,蛋糕只是分层到糕点对象中的一堆类型。
  • 包对象现在打开了吗?

标签: scala


【解决方案1】:

这是正常的做法,可以根据需要使用。您可以将一些您通常无法在文件中分组的内容(例如,常量)进行分组。

val DefaultKey="12345"  //not legal inside a file outside of a class or object

class A (key:String) {

}

合法版本:

package com.mytest

object KeyExchange {

   val DefaultKey="12345"  //now legal

    class A (key:String) {

    }

}

使用:

object Test extends App { //extending App is like a main method

  import com.mytest.KeyExchange._ //can use import statement here, bringing in class A and the const.

  val myA = new A(DefaultKey)
}

包对象有点像这个概念,除了放置在其中的东西对定义为该包的一部分的类和特征可用(例如 com.mytest)。这是您可以放置​​ const 项的地方类将经常使用,或更重要的是隐式函数和对象。你可以把所有这些东西放在一个单独的文件和对象中,但是你每次都必须明确地导入它们。您不必使用包对象。我的理解是,对于您确定大多数职业都可以使用的物品,应该谨慎使用它。

参考: http://www.scala-lang.org/docu/files/packageobjects/packageobjects.html

【讨论】:

    猜你喜欢
    • 2015-03-26
    • 2018-10-28
    • 2017-02-16
    • 2021-11-27
    • 2011-10-25
    • 2011-05-09
    • 2015-06-11
    • 2010-09-22
    • 2011-12-05
    相关资源
    最近更新 更多