SBE 6.5장 디버그 예제에 대한 Pharo 2.0에서의 해결법

이전글에 이어서 이제는 해결방법을 찾아보도록 하겠습니다.
(그런데 사실 스샷까지 찍고나니 그냥 ‘.’ 넣어도 될건데 괜히 삽질했다는 생각이 이제 드네요..-.-)

1. 일단 처음 이상한 부분을 확인한건 디버그에서부터였습니다. SBE의 예제 에서 나오는 메세지를 보면 다른곳에서 에러가 나온거거든요.

detect가 아닌 dot 에서 에러발생
detect가 아닌 dot 에서 에러발생

이야.. 웃기더라구요 이거….
저 스샷의 붉은 부분을 보시면 아시겠지만 FileDirectory의 dot 이라는 method를 불러야하는데…
FileDirectory 라는 class가 없다는겁니다.
이에 대한 자세한 내용은 이글 을 참고해주시면 되겠습니다.

여튼 그럼 대안이 없나 찾아봐야겠죠. 잘 보니 일단 저 dot 이라는게 뭐인지부터 좀 찾아봐야할거같았습니다.

2. Pharo 1.4를 따로 설치해서 해당되는 Class와 method가 있는지 찾아봤습니다.

pharo 1.4  에서의 FileDirectory>>dot method
pharo 1.4 에서의 FileDirectory>>dot method

뭘 하는지 자세히 보니까 extensionDelimiter를 asString으로 반환하는군요.
그럼 extensionDelimiter를 Pharo 2.0에서 찾으면 뭔가 방법이 보일거같았습니다.

3. Pharo 2.0의 Finder에서 extensionDelimiter를 쓰는걸 찾으면 아래와같은 결과를 볼 수 있습니다.

Pharo 2.0에서 extensionDelimiter를 사용하는곳의 검색결과
Pharo 2.0에서 extensionDelimiter를 사용하는곳의 검색결과

오호라.. 잘걸렸어요? 3개 클래스정도 되네요.
이중에서 Path라는 클래스의 extensionDelimiter를 사용하는걸로 하겠습니다.
하지만 정작 제가 원하는 동작이 되는지는 모르는거죠. 그래서 간단한 테스트를 진행하기로 했습니다.

4. workspace상에서 간단한 코드를 만들어 Path>>extensionDelimiter가 원하는 동작을 하는지 확인해보도록 하죠.

Path>>extensionDelimiter method의 테스트
Path>>extensionDelimiter method의 테스트

오호… Print it을 해보니까 ‘.’ 라는 결과가 나오는걸 workspace에서 확인할 수 있었습니다.
보자보자.. smalltalk에서 ‘(single quote)로 묶인건 String이라는 의미죠. 그럼 원하는 dot(쩜)이 제대로 얻어졌다는 얘기가 됩니다.

5. 이제 테스트된 결과를 실제 suffix method에 적용을 시켜볼까요.

변경된 코드를 suffix method에 적용한 결과
변경된 코드를 suffix method에 적용한 결과

이야.. 이제 원하는 결과가 나왔군요.
이전에 FileDirectory 클래스를 찾지못해 발생된 에러가 더이상 발생하지 않으며
원래 SBE문서에서 의도했던대로 detect:ifNone: 에 의해 발생되게 됩니다.

이제 원래 문서대로 학습을 진행해도 될거같습니다 😀

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다