1

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が と のインスタンスで呼び出されるとParametersContextデフォルトは値による呼び出しであるため、scala は「最初にパラメーターを評価します」。私の混乱は、この意味で「評価された」のはオブジェクトのコピーなのか、それとも単なるポインターなのかということです。これは、for 式の前にパラメーターを引き出すかどうかに明らかに影響します。

4

1 に答える 1