如何在scala函数中传递参数对象?

时间:2014-09-01 07:45:24

标签: javascript function scala

使用javaScript,我可以这样做:

var parameters = {}
for (object in objects) {
    if (someCondition(object)) {
        parameters.[object.getName()] = object.getValue();
    }
}
myFunction(parameters)

我们的想法是收集参数并将它们作为对象(!)传递给函数而不是数组。如何与scala类似?

2 个答案:

答案 0 :(得分:1)

这是Map用于的内容。在JavaScript中,我们可以交替使用对象来记录"记录"和"字典"。在Scala和大多数静态类型语言中,我们使用Map代替字典用例。与{j}字典相比,Map的一个优点是密钥的类型可以与String不同。

所以我会将您的示例翻译成以下内容,ObjClassobject的类:

import scala.collection.mutable

val parameters = mutable.Map.empty[String, ObjClass]
for (obj <- objects) {
  parameters(obj.name) = obj.value
}
myFunction(parameters)

请注意,上述内容非常重要,可以用更实用的方式重写:

val parameters = (
  for (obj <- objects)
    yield obj.name -> obj.value
).toMap

答案 1 :(得分:0)

尝试使用案例类。将默认值定义为默认参数。

case class Parameters(
  param1:String = "a"
  param2:Int = 1
)

val params = Parameters("b", 2)
myFunction(params)

val paramsWithDefault = Parameters()
myFunction(paramsWithDefault)

您可以使用scala的内置功能(案例类和默认值)获得类似jquery $.extend行为的内容。但实际上javascript是一种动态语言,你可以在其中合并对象,而scala是静态的。您在编译时定义对象。所以我们在这里所做的并不是完全合并对象。

此外,为了清晰起见,使用parameter objects在scala中并不常见。