제목과 질문이 명확하지 않은 경우 죄송합니다. 나는 그것을 기술 할 좋은 방법이 없다. 하지만 여기에 간다 :혼란스러운 ParamArray 동작 - 반복 배열이 어떻게 든 연결되어 있습니까?
그래서 "testMat"이 어떻게 든 연결되어 있고, 재정의하지 않더라도 값이 변경됩니다. 예를 들어, 아래의 코드를 실행하면 testResult의 matSum 함수에서 out1 및 out2의 값이 바뀌면서 (루프 내에서) 변경된다는 것을 알 수 있습니다. 그 이유는 무엇입니까? 이 값은 testResult1에서 변경되지 않습니다. 이 행동은 어디서 오는 것입니까?
Sub Main()
Dim testMat As Double(,) = {{1, 2}, {3, 4}}
Dim testResult As Double(,) = matSum(testMat, testMat, testMat)
Dim testResult1 As Double(,) = matSum({{1, 2}, {3, 4}}, {{1, 2}, {3, 4}}, {{1, 2}, {3, 4}})
End Sub
Function matSum(ByVal ParamArray args As Double()(,)) As Double(,)
'This function sums matrices. It assumes you know how to sum matrices.
Dim m, n As Integer
Dim out, out1, out2 As Double(,)
Dim numArgs As Integer = args.Length
out = args(0)
out1 = args(1)
out2 = args(2)
m = out.GetUpperBound(0)
n = out.GetUpperBound(1)
For v As Integer = 1 To numArgs - 1
For i As Integer = 0 To m
For j As Integer = 0 To n
out(i, j) = out(i, j) + args(v)(i, j)
Next
Next
Next
Return out
End Function
어레이는 참조 유형이므로 그럴 수 있습니다. 'ParamArray'와는 아무런 관련이 없습니다. – MarcinJuraszek
죄송합니다. 조금 더 자세히 설명해 주시겠습니까? 나는 ParamArray가 단지 ByVal 일 뿐이라고 생각했다. (아니면 당신이 말하는 것과 다른가요?) – Esteban
'ByVal'을 사용하면 'args'의 ID를 변경할 수 없습니다 (예 : 'args'가 새 배열이나 다른 배열을 가리킬 수 없음). 배열 요소와 같은 내용을 변경할 수 있습니다. –