【问题标题】:Scala: Initialize Object with External ParametersScala:使用外部参数初始化对象
【发布时间】:2016-03-21 08:57:38
【问题描述】:

假设我有一个变量x,它在某个时候从用户那里接收它的值。完成后,我需要设置一个需要 x 值的对象。

天真地,我想写:

Object MyCoolObject(num:Double) {
  //code
}

然后在代码中的某处:

val MCO = MyCoolObject(x)

但这在 Scala 中是不可能的。那我该怎么做呢?

【问题讨论】:

  • 我认为您需要挖掘伴随对象并应用方法。
  • 看来这里的每个人都对这个问题感到很困惑——也许你应该稍微退后一步,从更高的层面解释你想要完成的事情,并提供一些额外的背景信息?否则,我认为您到目前为止所提出的确切问题的答案就是无法参数化object

标签: scala object constructor


【解决方案1】:

这里已经讨论过了:Pass Parameters to Scala Object

您也可以使用case class

  case class MyCoolObject(num: Double)
  {
    //code
  }


  val n = 10 // external data
  val myCoolObject = MyCoolObject(n)

【讨论】:

  • 谢谢,但不是我要找的东西——我需要把它作为一个对象而不是一个类。此外,MongoDB 的方式也不是我在这里所拥有的。这实际上是关于传递参数,例如您的示例中的n
  • 您对如何创建 Scala 对象存在一些误解。请阅读我分享的重复问题链接。
【解决方案2】:

类似这样的:

class MyCoolObject(num:Double) {    
}

object MyCoolObject{
    def apply(x:Double) = new MyCoolObject(x)
}

val x : Double = 56.1
val MCO = MyCoolObject(x)

您可以使用这篇文章,即 https://twitter.github.io/scala_school/basics2.html

【讨论】:

  • 我怎么称呼它? val MCO = Bar(x)? MCO 会持有对象还是类?
  • 刚刚用您需要的正确代码修改了答案。 MCO 将持有该类的新实例。
  • MCO 仍然是一个对象而不是类的实例,有什么办法吗?
  • 好吧,我会说是的。不知道你为什么需要这个。但我会这样做: object MyCoolObject{ var myValue : Double = 0 def apply(x: Double) = { myValue = x this } }
  • 你会将你的值存储在伴随对象中。尝试做 println ( MCO.myValue) .
猜你喜欢
  • 2013-06-27
  • 1970-01-01
  • 2012-05-15
  • 1970-01-01
  • 2012-06-03
  • 1970-01-01
  • 1970-01-01
  • 2013-04-05
  • 1970-01-01
相关资源
最近更新 更多