【问题标题】:Global Variable in ScalaScala中的全局变量
【发布时间】:2013-11-08 22:12:10
【问题描述】:

我正在尝试在 Scala 中使用全局变量。可在整个程序中访问。

val numMax: Int = 300 

object Foo {.. }
case class Costumer { .. }
case class Client { .. }
object main {
var lst = List[Client]
// I would like to use Client as an object .

}

我收到了这个错误:

错误:在对象列表中应用方法缺少参数; 如果您想将其视为部分应用的函数,请使用 `_' 遵循此方法 var lst = 列表[A]

如何处理 Scala 中的全局变量以在主程序中访问。 在这种情况下我应该使用类还是案例类?

【问题讨论】:

  • 通过您的代码注释,您要完成的工作并不完全清楚。你想要一个可全局访问的、可变的Client 对象列表吗?或者您是否想要将一个可全局访问的 Client 实例放入列表中?

标签: scala functional-programming


【解决方案1】:

这不是全局变量。相反,你想说的是:

val lst = List(client1, client2)

但是,我不同意其他答案。 Scala 不仅仅是一种函数式语言。它既是功能性的(如果你问 Clojure 粉丝,可能不像它应该的那么纯粹)和面向对象的。因此,您的 OO 专业知识可以完美转化。

全局变量本身并没有错。担心的是可变性。像我一样喜欢val 而不是var。此外,您需要将 object 用于单例,而不是您可能在 Java 中使用的 static 范例。

【讨论】:

  • 全局变量使程序更难测试
  • 该陈述过于宽泛且过于简单化。您需要查看它的使用环境、程序的大小、语言/平台的详细信息等等。尽量避免软件开发中的陈词滥调。也就是说,如果你可以在没有全局变量的情况下做同样的事情,那就去做吧。但它并不像你想象的那样黑白分明。欧比旺说得最好:youtube.com/watch?v=wgpytjlW5wU
  • 说关注点只是可变性也有点过于简单了。可变变量的范围在函数式程序(例如,引用透明函数中的局部变量)和编程噩梦(即,全局变量)之间产生了差异。也就是说,甚至不清楚 OP 是否意味着全局变量。他可能指的是全局,只是还没有术语。
  • 虽然很有趣,但这些细微差别我没有解决,因为 1) 它们与 OP 的问题无关,2) 这不是理论计算机科学讨论的地方,以及 3) Stack Overflow 不赞成长意见线程。我很高兴在 Twitter 等更合适的场所解决这些问题。我还要提一下,虽然最初的问题有一个var。我只是真的希望你不是那些在 Facebook 上和他的女朋友吵架的人。这些冗长的讨论是有时间和地点的,而且不是在线线程。
  • 注意到了var,但代码注释听起来像是他可能试图将Client 视为单例值。这并不完全清楚。不过,无论如何都要尝试回答的道具。
【解决方案2】:

您引用的错误与您尝试创建全局变量无关。在List[Client] 之后,您缺少()

如果你必须创建一个全局变量,你可以把它放在一个像Foo这样的对象中,如果这个变量被称为numMax,你可以使用Foo.numMax从其他对象中引用它。

但是,不鼓励使用全局变量。也许将您需要的数据传递给需要它的函数。这就是函数式的方式。

【讨论】:

  • 能否推荐其他链接!我来自 OOP 世界!
  • Coursera 有一个excellent introduction 在 Scala 中进行函数式编程。
猜你喜欢
  • 2013-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-04
  • 2013-10-06
  • 2012-06-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多