Transcript와 숫자

간단하게 쓰자면

Transcript show: ‘aaaa’.

이 코드는 Transcript에 “문자열”을 출력한다는 의미가 되겠습니다.

http://trans.onionmixer.net/mediawiki/index.php?title=SqueakByExample:3.5

이 부분에서 block을 테스트하다보니 저 블록내에서의 연산은 숫자인데.. 그럼 숫자는 어떻게 출력하지? 라고 생각하고 테스트봤죠.

Transcript show: 1.

당연히 에러가 발생합니다. 그래서 숫자를 변환하는 별도의 함수외에 뭔가 방법이 없을까 라고 생각하고 Integer class의 셀렉터를 뒤지기 시작했습니다. 역시 찾으면 방법은 나오더군요.

Transcript show: 1 printString.

깔끔하게 잘 출력됩니다 또한 1 printString을 PrintIt해보면 ‘1’ 로 결과값이 나오는걸 알 수 있었죠.

사실 델파이같은데서는 showMessages(IntToStr(1)); 이런식으로 사용하기는 합니다만.. 일단 숫자 자체도 객체다보니 조금은 다른생각의 패러다임도 가능한게 아닐까 합니다. 이런것들은 확실히 좀 매력적이군요 😀

Transcript의 cr은 그 자체로 메서드입니다.

Transcript의 원래 클래스는  ThreadSafeTranscript 입니다.
이상하게 cr만 따로 보는 방법이 없다 했는데..(저는 cr 자체가 무슨 메세지같은건줄 알았죠)
ThreadSafeTranscript 클래스를 뒤져보니 cr 자체가 하나의 메소드군요…-.-;
그래서 행바꿈을 Transcript에 호출된시점에서 적용시켜주는겁니다.
이제 대략 쓰는방법을 조금씩 더 알아가는거같습니다 😀

 

workspace가 궁금해졌습니다.

타이틀을 바꾸고 싶어졌어요.

그래서 삽질을 했는데…………… 반만성공

object surfing
object surfing

요즘따라 이전에 승범님이 말했던 찾고 뒤져보기에 슬슬 재미가 들리는듯도 합니다.

대략 다음과같은 과정으로 가봤습니다만… (뭐 결과는 아래쪽에)

1. 현재 열린 workspace의 타이틀을 바꾸고 싶어졌습니다.

2. self label: ‘abcd’. do it 해도 이딴건 안되네요?

3. 그럼 workspace는 어떻게 여는지 궁금해졌습니다. 그래서 worldmenu를 까서 뭘로 실행하는지를 봤죠.

4. 실행은 Smalltalk tools openWorkspace. 이야 설마?

5. 위의 구문을 Smalltalk tools workspace open. 으로 하니깐 잘되네요?

6. 슬슬 class를 찾기시작. SmalltalkImage > tool 이라는 셀렉터가 있군요.

7. 해당되는 셀렉터를 보니 값이 할당안되면 ToolRegistry 로 새로운 인스턴스를 생성해서 호출한쪽에 반환하는군요.

8. 여기까지의 결과로 보자면 Smalltalk tool. 이라고하면 비어있는 ToolRegistry 객체만 반환되면서 doit을 해봤자 아무것도 안일어나는 상황이 됩니다. 빈객체니깐요.

9 이제부터 실험. 그럼 빈객체를 반환받아서 장난을 쳐보면 어떨까?그래서 아래같은 장난을 쳐봤습니다

a := Smalltalk tools. <- doit 이후 a의 class는 ToolRegistry
b := a openWorkspace. <-  doit 이후 a의 class는 Workspace
b label:’abcd’. <- 일단 b의 객체포인터를 알고있기때문에 셀렉터로 메세지를 보낼수있다

이야.. 이렇게 해서 새로 띄운 Workspace의 타이틀을 abcd로 바꿀 수 있었습니다.

그런데 정작 타이핑을 하고있는 기존의 Workspace에는 결국 타이틀을 바꾸지 못했네요.

 

squeak에서 객체를 찾아가는 방법은 참 재미있는거같습니다. 이러다가.. 다른 smalltalk 쓸 수 있을까요 ㅎㅎㅎ

 

==============================================

메일링리스트에서 장윤재님이 알려주신 방법입니다.
이자리를 빌어(?) 다시한번 감사드립니다.

역시 멀은거같아요 ㅋㅋㅋ

제가 찾은 방법입니다. (아마도 가장 쉬운 방법…)

1) 바꿀 workspace에서 control + 클릭해서 메뉴를 보면 맨 아래에 Edit label… 메뉴가 있어요……

2) 이걸 힌트로 삼아서,
workspace 의 inspect 를 보니, workspace가 SystemWindow 군요.
SystemWindow 를 workspace 에 입력하고 블럭잡아 command+b 를 눌러서 코드를 보니,
label 카테고리가 있고, 여기에 setLabel: 메소드가 있네요.

다시 inspect 창에서 self setLabel:’test’. 로 do it 하니 창 이름이 변경되었어요- ㅎㅎ