function 사용 시 파라메터 관련 질문입니다.

게시판 IDL Q&A function 사용 시 파라메터 관련 질문입니다.

2 답변 글타래를 보이고 있습니다
  • 글쓴이
    • #2333 Reply
      knightflow
      회원

      코드 내에 반복되는 계산 수식이 있어

      function name, x, y, z
      ..
      return, result
      end

      pro test
      for i=0, 10 do begin
      for j=0, 10 do begin
      for k=0, 10 do begin
      param = name(i, j, k)
      endfor
      endfor
      endfor
      end

      이런 형식으로 사용하였습니다.

      근데 예를 들어,
      i=1.0
      j=2.0
      k=3.0
      이렇게 값을 주었다고 가정했을 때

      function 안에
      x=x*1d-4
      y=y*1d-4
      z=z*1d-4
      이런 식으로 변환하는 부분이 있는데, 한 번 function으로 계산하면 i, j, k 값도 function 내에서 위와 같이 계산되어진 형식 그대로 나오는군요. 다시 말해,
      i=1.0d-4
      j=2.0d-4
      k=3.0d-4
      이런식으로 나와서 for 문이 제대로 돌아가지 않더라구요.

      제 생각으로는 function 내에서 i, j, k로 입력한 값이 어떻게 사용되던간에 영향을 받지 않을거라고 생각했는데 아닌 것 같네요..;;

      그렇다고 억지로 function 내에서 다시 1d4 를 곱해주어 되돌려 주더라도 for 문에 첫번째값으로 계산 헛돌더군요.ㅋ;;

      아무래도 function 사용법을 제대로 이해하고 있지 못한 것 같아서 질문 올립니다.

      수고하세요.

    • #2334 Reply
      knightflow
      회원

      엇;;
      글을 어떻게 지우는지 몰라서 댓글로 답니다.
      어찌 해결해버려서;;

      function name, x, y, z

      end

      로 사용시 function 내에서 x, y, z 를 그대로 사용하니 그게 그대로 영향을 받는군요;;
      function 내에 x, y, z에 대응되는 변수를 다르게 주니 괜찮네요.
      ;;

    • #2337 Reply
      Jonghyuk
      회원

      call by reference 라고 해서, 대부분의 프로그래밍 언어가 제공하는 모듈 간의 자료 전달 방식인데요,
      IDL에서는 변수 명을 이용해서 호출하면, 함수쪽에서 그 변수의 값을 실제로 바꿀 수 있게 됩니다.

      myfunct(x, y, z)

      과 같이 호출하면 myfunct 함수에서 이에 해당하는 변수 예를 들면,
      function myfunct, a, b, c

      에서 a, b, c 에 해당하는 값이 내부적으로 바뀔 때, 나중에 호출하는 쪽의 x, y, z 도 바뀌어 있게 됩니다.
      call by reference 라는 이름 그대로, “지금 내가 아예 자료가 저장되어 있는 메모리를 통채로 넘겨 주니, 이 안의 값을 고치던 퍼가든 마음대로 하세요” 라는 식의 자료 전달입니다. 이번 사례에서는 불편하셨는지 몰라도, 이게 사용자의 의도일 경우가 종종 있습니다.

      이와 반대가 되는 것으로 call by value 라는 호출방식이 있는데,
      IDL에서는 “변수이름 직접 전달”을 제외하고는 모두 call by value 입니다. 즉, 호출되는 프로그램이 리턴할 때, 이 값을 바꾸지 못해요. 사실
      myfunct(1, 2, 3)
      이라고 호출하면, 1, 2, 3을 다른 값으로 바꿀 방법도 없잖아요. 이게 call by value 입니다.

      정히, call by reference 가 아니게 즉, 보내는 값은 바꾸지 못하게 하고 싶으시면.
      myfunct(x+0, y+0, z+0)
      과 같이 의미 없는 수식을 만들어 보내는 방법도 있습니다.

2 답변 글타래를 보이고 있습니다
'function 사용 시 파라메터 관련 질문입니다.'에 답변달기
글쓴이 정보: