使用javaScript,我可以这样做:
var parameters = {}
for (object in objects) {
if (someCondition(object)) {
parameters.[object.getName()] = object.getValue();
}
}
myFunction(parameters)
我们的想法是收集参数并将它们作为对象(!)传递给函数而不是数组。如何与scala类似?
答案 0 :(得分:1)
这是Map
用于的内容。在JavaScript中,我们可以交替使用对象来记录"记录"和"字典"。在Scala和大多数静态类型语言中,我们使用Map
代替字典用例。与{j}字典相比,Map
的一个优点是密钥的类型可以与String
不同。
所以我会将您的示例翻译成以下内容,ObjClass
是object
的类:
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中并不常见。