How to pass an object to a method in Scala

亡梦爱人 提交于 2019-12-20 00:07:13

问题


How can I pass the reference of an object to method in Scala? E.g. I want this to compile

object Constants {
  val constantA:Double = ???
}


def calc(numbers:Seq[Double], Constants) = ??? // does not compile
def calc(numbers:Seq[Double], constants:Constants) = ??? // does not compile

Of course I can just reference Constants without passing it through the argument list, but I would prefer to list pass all dependencies of the method explicitly as arguments.


回答1:


Constants is an object. You don't specify objects as parameter types for method parameters, you specify types as parameter types for method parameters:

def calc(numbers:Seq[Double], constants: Constants.type) = ???

Generally speaking, more precise types are good, but in this case, it might be overdoing it with an overly precise type, since there is exactly one instance of the type Constants.type, so you cannot ever pass anything other than the Constants object as an argument, which makes the whole idea of "parameterizing" rather pointless.




回答2:


You can use the Any type

def calc(numbers:Seq[Double], constants: Any) 

but this wouldn't allow you to access the constantA value. Alternatively you could define a trait with the constant and let you object implement that:

trait ConstantA {
  val constantA:Double
}

object Constant extends ConstantA {
  override val constantA:Double = 0.0
}

def calc(numbers:Seq[Double], constants: ConstantA) {
   ...
   // use constants.constantA
   println(constants.constantA)
   ...
}



回答3:


In addition to Jörg W Mittag's answer, you can create an interface:

trait IConstants {
  def constantA: Double
}

object Constants extends IConstants {
  val constantA: Double = ???
}

def calc(numbers:Seq[Double], constants: IConstants) = ???

Whether this is useful very much depends on your specific situation.




回答4:


Look at the synthax of your method definition: what does your calc method produce ? Unit ? Int ? I suggest that you review the basics of the Scala synthax first



来源:https://stackoverflow.com/questions/42761790/how-to-pass-an-object-to-a-method-in-scala

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!