매크로

질문
2015.01.14 10:05

함수와 변수 질문

조회 수 969 추천 0 댓글 18

함수내에 변수들은 함수내에서만 유효한 지역변수인것으로 알고 있습니다

?

그래서 함수로 인해 변경된 결과값은 return명령으로 반환해야하며

한개 이상의 값을 반환해야할 경우

Byref를 이용 참조변수로 선언하여?사용하든지,

아니면 Global 명령으로 전역변수 선언을 하든지

?

이런 방법이 있는것으로 일단 파악을 했는데요,

?

제가 알고 싶은것은

스크립트 본문 중에 있는 변수를 함수내에서 호출하여 사용할수 있는가 입니다

?

간단한 예를들면

?

a=3
b=4
msgbox a=%a%`nb=%b%
msgbox % My_Add()

?

My_Add()
{
c:=a+b
return c
}

이렇게 작성해도

첫번째 메시지 박스에서는 a=3, b=4라고 잘뜨지만 두번째 메시지박스에서는 빈칸만 출력이 되는데요

?

본문에 선언된 변수를 함수에서 호출하려면 다른 방법을 사용해야하는것인지 문의드립니다 ^^;


  • 로뎀나무 2015.01.14 10:09

    global 변수명

    으로 함수내에 호출해주시면 됩니다.

  • Hangoon 2015.01.14 10:16
    로뎀나무님 빠른 답변 감사합니다
    그러나 설명해주신 부분은 함수내에서 계산된 변수를 본문 스크립트에서 사용하는 방식이고요,
    실제로 상기에 예시로 올린 스크립트에서 함수안이든 밖이든 global a를 사용할 경우 에러가 뜨게됩니다

    제가 원하는 것은 본문 스크립트 중에 이미 정의되어있는 변수를
    함수에서 그대로 사용하고 싶다는 것입니다

    상기 예시에서 보면 본문스크립트에 a,b변수가 각각 3,4로 정의가 되어있고
    함수는 c라는 변수에 a+b를 더하는 연산을 하고 c값을 반환하도록 작성했습니다
    하지만 정상작동하지 않고 있는 것이고요...

    물론 저기서

    a=3
    b=4

    msgbox a=%a%`nb=%b%
    msgbox % My_Add(a,b)

    My_Add(a,b)
    {
    c:=a+b
    return c
    }
    이렇게 함수에 변수를 지정해주면 정상작동하는 것은 알고 있습니다

    다만 좀더 복잡한 함수를 지정할때(이미지서치에 따른 클릭 등) 변수를 지정하지 않고서도 함수내에서 본문 내에 정의된 변수를 사용할 수 있는 방법이 있다면 더 좋을 것 같다는 생각이 드네요...

    혹시 이부분은 모르시는지요??
  • 로뎀나무 2015.01.14 11:08

    제가 질문을 잘못이해한것인지는 모르겠지만...

    a=3
    b=4

    msgbox a=%a%`nb=%b%
    msgbox % My_Add()
    return
    My_Add()
    {
    global a
    global b
    c:=a+b
    return c
    }

    원하시는게 이거 아닌가요? -_-;;

    답변 잘 드린거 같은데요 ㄷㄷㄷ

  • Hangoon 2015.01.14 11:20
    이미 테스트해보았지만 에러메시지가 출력됩니다
    함수내의 변수와 본문내 변수는 아예 별개로 취급되는 것 같습니다
    본문에서 가져올 변수는 윗 댓글처럼 함수 괄호안에 모조리다 넣고 짜는방법이 유일해보이네요 지금은 ㅎㅎ
  • profile
    외치기 2015.01.14 11:23
    global 사용시 에러가 출력된다면 오토핫키 버전을 점검하세요.
  • Hangoon 2015.01.14 12:48
    어제 공홈에서 설치한것인데 혹시 버전 몇을 설치해야하는지 알려주시면 감사하겠습니다
  • Hangoon 2015.01.14 12:51

    a=3
    b=4

    msgbox a=%a%`nb=%b%
    msgbox %c%

    My_Add(a,b)
    {
    global c
    c:=a+b
    }

    이 스크립트는 정상 작동하는데 제가 이해한게 맞는거 같습니다
    함수내에서 변수와 스크립트 본문의 변수는 완전 별개로 취급하네요

  • 모바게 2015.01.14 11:22

    로뎀나무님 답변처럼 하는게 맞습니다.

    단순히 위의 예제에서는 a, b를 넘겨서 계산값을 가져오는게 더 좋은 방법이라고 할 수 있겠죠.

  • Hangoon 2015.01.14 12:54

    a=3
    b=4

    msgbox a=%a%`nb=%b%
    msgbox %c%

    My_Add(a,b)
    {
    global c
    c:=a+b

    }

    이 스크립트는 정상작동하고요,
    함수내에서 global 명령 사용시, 함수내 정의된 변수만 전역변수로 사용가능한 것 같습니다
    이는 함수 내 변수와 스크립트 내 변수가 별개로 취급때문인것 같습니다

    즉 아래와 같은 함수는 메시지 박스에 4가 아닌 3을 출력하는 것과 같습니다

    a=1
    b=2
    c=3

    msgbox % My_Add(a,b)

    My_Add(a,c)
    {
    return a+c
    }

  • profile
    외치기 2015.01.14 13:14
    무슨소린지 도무지 이해가 안되네요.
    위에 로뎀님이 올린신 스크립트 하나로 글로벌의 사용법과 지역변수 전역변수의 구분이 가능한데
    그 스크립트가 에러가 나셔서 혼자 다른 코드로 추측과 가정을 하시는거 같네요.
    기본적으로 모든 변수는 지역변수입니다.
    global선언을 하면 전역으로 쓸 수 있는거고요.
    함수 내에서 정의된 변수만 전역으로 사용할 수 있다?? 이부분이 저는 이해가 안되네요.
    함수 밖에서 global로 선언하고 충분히 전역으로 쓸 수 있을텐데요.
  • Hangoon 2015.01.14 13:28
    흠....일단 저도 조금 혼란스러운 상태라 조금 더 테스트를 해보도록 하겠습니다
    일단 이론은 설명해주신 덕분에 잘 알았습니다
    감사합니다
  • 모바게 2015.01.14 14:23

    함수내에서 global 명령 사용시, 함수내 정의된 변수만 전역변수로 사용가능한 것 같습니다

    이는 함수 내 변수와 스크립트 내 변수가 별개로 취급때문인것 같습니다

    -> 당연히 함수 내부의 변수는 함수 내부에서 선언된것과 파라메터로 넘어온 변수만 사용할 수 있습니다.

    -> 거기에 global 선언을 함으로, 전역변수를 추가로 사용할 수 있습니다.

    -> 함수는 완전히 독립된 공간으로 생각해야 합니다.

  • 로뎀나무 2015.01.14 14:27
    a=1
    b=2
    c=3

    msgbox % My_Add(a,b)

    My_Add(a,c)
    {
    return a+c
    }

    여기서 3을 출력하는게 당연한게..

    msgbox % My_Add(a,b)
    여기서 함수 첫번째변수에는 a값 1, 두번째변수값에는 b값2가 들어가죠
    그럼 함수를 호출해보자면..
    첫째변수와 둘째변수의 합이 리턴되게 되어있으니 당연히 3이 나옵니다. -_-

    만약 4를 얻고싶었다면
    msgbox % My_Add(a,c)
    가 맞는 명령어구요..

    함수설정에서
    My_Add(a,c)
    {
    return a+c
    }
    로 함수를 잡으면
    아래 스크립트에서는 a와 c에 맞는 값이 자동으로 입력되요

    a:=a
    c:=b
    요렇게 함수에 들어가죠
    들어간값은 당연히 3이고요;;
    제가 써놓은 스크립트 복사해서 한번 해보셨음하네요;;
  • Hangoon 2015.01.14 13:32

    그냥 간단하게 전역선언한 변수를 함수내에서 읽어올수있는지만 아래와 같이 테스트해보니

    생각했던 대로 잘 작동되었습니다

    ?

    a=3
    b=4
    My_Add()

    return

    My_Add()
    {
    global a
    global b
    msgbox %a%, %b%
    }

    ?

    쉽게 설명을 해주셔도 쉽게 알아먹지 못한 중생을 구제해주시느라 고생하셨습니다....

    @로뎀나무 님 @외치기 님 @모바게 님 감사합니다

  • profile
    외치기 2015.01.14 13:35

    해결하셨다니 참 다행입니다.

  • 모바게 2015.01.14 14:18
    아래 코드로 제대로 잘 동작합니다..
    결과 : 7

    a:=3
    b:=4
    msgbox a=%a%`nb=%b%
    msgbox % My_Add()

    My_Add()
    {
    global a, b
    c:=a+b
    return c
    }

  • 깨꿍 2015.01.16 14:18

    글로벌변수와 파라미터 개념을 헷갈리시는것 같은데...

  • Hangoon 2015.01.16 18:08
    많은분들 도움으로 이미 해결했습니다 ^^
    감사합니다 ^^

List of Articles
분류 제목 글쓴이 최근변경 추천
질문 함수지정에 대해 잘못알고 있는것 같습니다 3 망둥어 2018.04.27 0/0
질문 함수와 변수 질문 18 Hangoon 2015.01.16 0/0
질문 함수에다가 변수사용해서 카운팅 하고있는데 어렵네요 3 망겜판독기 2018.04.05 0/0
질문 함수에 오류나는데 무슨 뜻인가요 ?? 1 wngo 2019.07.18 0/0
질문 함수안에서 다른 함수를 호출할 수 있나요? 3 거룩한검 2016.03.13 0/0
질문 함수사용과 이미지서치 도움좀 부탁드립니다.. 5 소다맛사탕 2018.01.04 0/0
질문 함수를 중복(동시)에 2~3개를 할 수 있을까요? 9 Rabbit 2016.05.17 0/0
질문 함수를 만들었는데 원하는대로 작동을 안하네요. 좀 봐... 3 cis105 2022.09.29 0/0
질문 함수를 랜덤으로 중복없이 실행시키려면 어떻게 하면될... MC하얀늑대 2016.02.15 0/0
질문 함수가 1일 경우 명령어를 실행 하는방법 없을까요? 4 아키만점 2015.02.16 0/0
질문 함수 질문드립니다 2 광대승천 2020.07.28 0/0
질문 함수 질문 있습니다!!! 2 adde 2018.07.24 0/0
질문 함수 이미지서치 투명!!베스트글 모바게님의 함수 질문... 2 혜띠뿌뿌 2016.03.29 0/0
질문 함수 안에서 gui체크박스 여부에 따라 적용되는건 어떻... 2 복권상인 2017.04.12 0/0
질문 함수 사용 질문입니다 ( 드랍다운리스트와 비활성 클릭) 1 몬길러축협 2015.11.16 0/0
질문 함수 사용 질문 6 빵글빵글 2018.10.03 0/0
질문 함수 불러와서 쓸 때 함수 내의 특정부분만 예외처리 ... 14 아이나인 2015.10.26 0/0
질문 함수 winmove 질문드립니다 4 PlusK 2016.05.29 0/0
질문 한창 공부 중인데 추천 해줄만한 책 있나요?? 1 Minuya 2017.07.05 0/0
질문 한줄짜리 비활성 클릭이 안되는 이유가 뭘까요... 데프픗 2017.12.10 0/0
Board Pagination Prev 1 2345678910 ... 173 Next
/ 173

전체 최신 인기글

전체 주간 인기글