Scala では、オブジェクト自体ではなく、オブジェクトへのポインターを渡します。以下のようにネストされた関数を介してオブジェクト ポインターを渡すことに問題はない、つまり、オブジェクトのレイヤーが割り当てられないというのは正しいでしょうか。
case class Parameters(name: String, id: String, values: Array[Double])
case class Context(id: String, a: Double, b: Double, c: Double)
と
def myFunc(par: Parameters, ctx: Context): Unit = {
//..do stuff
for (i<- 1 to ITERATIONS) {
otherFunctions.resolve(par, ctx)
}
object otherFunctions {
def resolve(params: Parameters, ctx: Context): Unit = {
//do more ...
val x: Int = {...}
calculate(params.values, ctx.a, ctx.b, x)
}
def calculate(array: Array[Double], b: Double, c: Double, x: Int) = ...
}
}
この場合、myFunc
が と のインスタンスで呼び出されるとParameters
、Context
デフォルトは値による呼び出しであるため、scala は「最初にパラメーターを評価します」。私の混乱は、この意味で「評価された」のはオブジェクトのコピーなのか、それとも単なるポインターなのかということです。これは、for 式の前にパラメーターを引き出すかどうかに明らかに影響します。