Execution Context? (this 와 global)

6 views
Skip to first unread message

deadbeef

unread,
Apr 6, 2008, 1:42:18 PM4/6/08
to squirrelusers-kr
안녕하세요.
squirrel 보기 시작한지 이틀된 유저입니다.
스크립트를 gui 시스템에 적용해보고자 하는데,
가장 이상적인 스크립트로는 자바스크립트가 있겠지만
좀 오버헤드가 큰 것 같아서 squirrel 을 고려중입니다.

현재 스크립트를 다음과 같이 쓸 수 있는지 고민중입니다.

<form>
<textbox name="tb1" label="oldLabel"
onclick='this.setLabel("newLabel"); GlobalFunc(123);'/>
<script>
function onLoad()
{
someFormFunc(100,200);
}
GlobalFunc(345);
</script>
</form>


위에서 스크립트 부분은 onclick 과 script 태그 부분인데요,
C++ 에서 textbox 나 form 에 대한 클래스를 정의하고
위의 스크립트 부분을 실행하고 싶습니다.
(맞는 문법이라고는 할 수 없지만 저렇게 코딩하고 쓸 수 있었으면 좋겠습니다.)

위에서 GlobalFunc 는 글로벌 함수라고 할께요, sqstd의 print() 같은..
그런데 setLabel 은 글로벌함수가 아니라 textbox 클래스의 메소드이고,
someFormFunc 는 form 클래스의 메소드라고 하지요,

일단.. global(?) 과 this 의 개념이 불확실합니다.
매뉴얼을 보면 두개가 따로 지원되는 것같은 느낌이었는데,
api 에는 this 에 대한 지원이 없고 root table 만 설정할 수 있는 것 같습니다.
그 root table 이 아마도 global 인것 같고요..

이 둘은 항상 같은 것인가요? 아니면 독립적으로 두개가 동시에 존재할 수 있나요?
만약 둘이 다르다면 위처럼 스크립트를 쓸수도 있겠다는 생각인데요,
textbox 의 인스턴스를 this 로 셋팅하고 (방법이야 어쨌건 개념적으로.. 가능하다는 전제하에.. -_-)
onclick 스크립트를 실행하면 textbox의 setLabel 을 호출하고 또 global 함수인 GlobalFunc 도 호
출하고..

마찬가지로 아래쪽 스크립트는 this 와 global 이 다르다는 전제하에 form 쪽의 script 태그 부분을 실행할 때는
form 의 인스턴스를 this 로 셋팅후 실행하고 싶은데.. (안된다면 말짱 황이지만..)


그런데 헤더파일을 아무리 봐도 this 관련된 것을 셋팅해줄것 같은 api 를 못찾았고
오로지 sq_setroottable 만 있는 것 같아서, this 는 스크립트를 실행할 때의 global (root)
context 이지
않을까 생각됩니다. 만약 그렇다면 this.setLabel 을 호출가능하도록 설정한다면 GlobalFunc 는 호출이 실패할것
같고요..



squirrel 에 대해 잘 몰라서 위 내용에 단어 사용이 적절한가는 모르겠는데요,
html 해보신 분은 자바스크립트로 위와같이 쓰는 것에 대해 개념은 익숙하시리라 생각합니다.
squirrel 은 위와같은 상황에 쓸 수 있는 언어일까요?


yagur

unread,
Apr 8, 2008, 7:33:37 AM4/8/08
to squirrelusers-kr

http://squirrel-lang.org/forums/post/2168.aspx

scopping/this/roottable에 관한 쓰레드가 있습니다. (fagiano가 Alberto Demichelis입니
다. <언어 저자>)
보면 아시겠지만 java나 c++의 this와 유사합니다.

A = C++ TextBox 객체,
B = Squirrel TextBox 객체

제 생각에 xml 파싱중 B를 A로부터 상속받아 인스턴스를 생성하면 Squirrel 객체가 됩니다. C++의 객체를 상속받
아 Squirrel 객체로 파생될수 있습니다만, 아마 그렇게 하길 원하시진 않을것 같습니다. TextBox객체 자체는 C++객체
인데 클릭이벤트가 발생했을때 onclick="..."으로 지정한 부분의 스크립트가 호출되길 원하시는것으로 추측하고 있습니다.
방법은 어떻게 설계하느냐에 따라 꾀 여러가지가 될것같습니다. Squirrel 객체와 C++객체간에 레퍼런스를 넘겨 상호 참조
식으로 갈수도 있습니다. B가 A를 참조하며, A의 인터페이스를 갖고 있어, A를 위임하면 this를 통해 A로 접근할수 있습니
다.

상속관련
http://groups.google.com/group/squirrelusers-kr/browse_thread/thread/503743dc1cbc26b5
레퍼런싱
http://groups.google.com/group/squirrelusers-kr/browse_thread/thread/a1955bf0257ac64f

해답은 아니지만 대충 스크립트와 C++간의 '참조' 혹은 '상속된것의 참조' 어떻게 이루어지는지에 관한 쓰레드들이었습니다.
Reply all
Reply to author
Forward
0 new messages