다음: 재귀, 상위 문서: 함수 호출   [차례][찾아보기]


8.2.1 값으로 호출

포트란과는 다르게, 옥타브에서 함수 매개변수는 값으로 인정되어, 함수 호출에서 개별 매개변수를 함수에서 처리되지 전에 먼저 검사하여 막기억장치의 임시 구역에 할당합니다. 현재는 함수 매개변수를 값이 아닌 참조로 처리하게 할 명시법이 없습니다. 이 말은 호출한 함수의 함수 매개변수를 직접적으로 바꿀 방법이 없다는 이야기입니다. 그저 울안에 복제한 함수 몸체만 바꿀 뿐입니다. 예를 들어, 아래 함수는

function f (x, n)
  while (n-- > 0)
    disp (x);
  endwhile
endfunction

첫 번째 매개변수를 n번 보여줍니다. 이 함수에서 변수 n의 값이 호출로 인하여 바뀔 염려 없이 변수 n은 임시 변수처럼 사용됩니다. 값으로 호출은 또한 함수가 매개변수를 건드는지에 확인할 필요 없이 모든 함수 매개변수에 상수를 넣을 수 있어 유용합니다.

호출자는 변수를 표현식용 매개변수로 사용하여도 되나, 호출된 함수는 이를 알지 못합니다. 함수는 그저 매개변수가 어떤 값을 가졌는지만 압니다. 예를 들어, 주어진 함수를 아래처럼 호출할 때,

foo = "bar";
fcn (foo)

매개변수를  “변수 foo”로 생각하지 말고, 문자열 값 "bar"라고 생각하여야 합니다.

비록 옥타브가 함수 매개변수에서 값에 의존하는 의미 체계를 사용하기는 하지만, 값을 불필요하게 복사하지는 않습니다. 예를 들어,

x = rand (1000);
f (x);

는 함수 f가 매개변수를 조작하지 않는 1000×1000짜리 행렬을 두 개로 만들지 않습니다. 함수 f가 매개변수를 조작하는 경우에는, 함수 f가 자신의 유효 범위 밖에서 값을 바꿀 수 없도록 사본을 만들거나, 상수 값 조작(보통 실패합니다!) 또는 임시 결과 값 조작을 시도합니다.


다음: 재귀, 상위 문서: 함수 호출   [차례][찾아보기]