오토핫키 커뮤니티

질문
2015.01.14 10:05

함수와 변수 질문

조회 수 985 추천 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
분류 제목 글쓴이 최근변경 추천
정보 지니모션 드래그 함수 1 연구원 2015.01.21 1/0
질문 오토핫키좀 배워보려합니다 6 PMS 2015.01.23 0/0
질문 아래 글에 이어 이미지서치 질문드려요~ ㅠㅠ 13 시니짱 2015.01.17 0/0
질문 이미지서치 관련 질문드립니다 ㅠㅠ 제발등업좀2 2015.01.16 0/0
정보 지니모션 테마 및 윈도우 버전 상관없이 해상도 변경하... 로뎀나무 2015.01.16 2/0
자유 이미지서치의 인식률 값 관련 질문 2 Hangoon 2015.01.16 0/0
질문 이미지서치와 해상도 변경에 대해서.. 3 시나브로 2015.01.15 0/0
질문 스크립트 편집 뭐로 하세요? 17 시나브로 2015.01.18 0/0
질문 컴파일된 프로그램의 트레이 아이콘 2 Hangoon 2015.01.15 0/0
질문 키를 눌러서 영지선택후 나중에 자동입장??(고수님 답... 9 여우블록 2015.01.22 0/0
질문 이미지 서치가 안되네요! 13 시니짱 2015.09.23 0/0
질문 오핫키로 모비즌 창위치 옮길수 잇나요?? 1 크농 2015.01.14 0/0
자유 오토핫키 비활성 터치 참 어렵군요 14 Hangoon 2015.04.14 0/0
정보 SMTP 메일보내기 13 모바게 2020.08.10 2/0
질문 함수와 변수 질문 18 Hangoon 2015.01.16 0/0
질문 오토핫키로 문자나 email전송이 가능한가요? 3 Hangoon 2015.01.23 0/0
질문 지니모션에서 드래그 기능 쓰시는분???? 27 안호성 2015.08.27 0/0
자유 오토핫키 블로그를 이용한 하드 인증방법 9 캔디염 2017.10.31 0/0
질문 모바게님 비활성 함수 질문 5 시나브로 2015.01.13 0/0
질문 태크 및 스킬 문의좀 할게요 2 하지마라공 2015.01.13 0/0
Board Pagination Prev 1 ... 189190191192193194195196197 ... 209 Next
/ 209

전체 최신 인기글

전체 주간 인기글