GnuSmalltalkUsersGuide:BaseChapter 156

From 흡혈양파의 번역工房
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
Symbol

Symbol

네임스페이스 Smalltalk에 정의됨

슈퍼클래스: String

범주: 언어-구현


나의 인스턴스들은 스몰토크 시스템에서 유일하다. 나의 인스턴스들은 서로 다르게 인쇄한다는 점만 제외하면 대부분의 경우 문자열과 같이 행동하며, 똑같이 인쇄된 표현을 가진 두 개의 인스턴스라면 사실 같은 인스턴스라고 보장할 수 있다.


Symbol 클래스: built-ins

intern: aString

Private -'aString asSymbol'와 동일하다.


Symbol 클래스: 인스턴스 생성

internCharacter: aCharacter

주어진 문자에 연관된 1-문자 부호를 응답하라.

new

이 클래스의 인스턴스를 대상으로 해당 메서드를 호출해서는 안 된다.

new: size

이 클래스의 인스턴스를 대상으로 해당 메서드를 호출해서는 안 된다.

with: element1

유일한 요소가 element1인 컬렉션을 응답하라.

with: element1 with: element2

전달된 순으로 된 매개변수들을 유일한 요소로 가진 컬렉션을 응답하라.

with: element1 with: element2 with: element3

전달된 순으로 된 매개변수들을 유일한 요소로 가진 컬렉션을 응답하라.

with: element1 with: element2 with: element3 with: element4

전달된 순으로 된 매개변수들을 유일한 요소로 가진 컬렉션을 응답하라.

with: element1 with: element2 with: element3 with: element4 with: element5

전달된 순으로 된 매개변수들을 유일한 요소로 가진 컬렉션을 응답하라.


Symbol 클래스: 부호 테이블

hasInterned: aString ifTrue: aBlock

aString이 intern되지 않았다면 false를 응답하라. 그 외의 경우 intern된 버전을 aBlock으로 전달하고 true를 응답하라. 이것이 작동하는 이유는, String>>#hash 는 VM이 문자열을 SymbolTable로 intern할 때 사용하는 것과 동일한 해시값을 계산하기 때문이다. 다른 것은 변경하지 않고 해싱 메서드 중 하나를 변경할 경우 해당 메서드를 break할 수 있다.

isSymbolString: aString

aString이 이미 intern되었는지 응답하라. 이것이 작동하는 이유는, String>>#hash 는 VM이 문자열을 SymbolTable로 intern할 때 사용하는 것과 동일한 해시값을 계산하기 때문이다. 다른 것은 변경하지 않고 해싱 메서드 중 하나를 변경할 경우 해당 메서드를 break할 수 있다.

Calculates

rebuildTable

SymbolTable을 재빌드하고, 그에 따라 쓰레기 수집이 Symbols를 참조해제(unreferenced)한다. 해당 프로세스가 실행되는 동안 선점(preemption)이 비활성화되는데, SymbolTable을 부분적으로 업데이트된 상태로 남겨두는 것이 허용되지 않기 때문이다. 이것이 작동하는 이유는, String>>#hash 는 VM이 문자열을 SymbolTable로 intern할 때 사용하는 것과 동일한 해시값을 계산하기 때문이다. 다른 것은 변경하지 않고 해싱 메서드 중 하나를 변경할 경우 해당 메서드를 break할 수 있다.


Symbol: 기본

deepCopy

수신자의 깊은 복사를 리턴한다. Symbols는 정체성 객체이므로 우리는 사실상 수신자 자체를 리턴한다.

keywords

수신자를 구성하는 키워드의 배열을 응답하되 수신자는 유효한 메시지 명이어야 한다

(#+, #not, #printOn:, #ifTrue:ifFalse:, etc.).

numArgs

수신자가 지원하는 인자 수를 응답하되 수신자는 유효한 메시지 명이어야 한다 (#+, #not, #printOn:, #ifTrue:ifFalse:, etc.)

shallowCopy

수신자의 깊은 복사를 리턴한다. 부호는 정체성 객체이므로 우리는 사실상 수신자 자체를 리턴한다.


Symbol: built-ins

= aSymbol

수신자와 aSymbol이 동일한 객체인지 응답하라.

hash

수신자에 대한 해시값을 응답하라. Symbols는 속도에 최적화되었다.


Symbol: 변환하기

asString

수신자와 같은 문자로 된 String을 응답하라.

asSymbol

하지만 우리는 이미 Symbol인데다가 Symbols는 정체성 객체이다! 따라서 수신자를 응답하라.


Symbol: misc

species

'String'을 응답하라.


Symbol: 보관하기

displayOn: aStream

수신자의 표현을 aStream 상에 인쇄하라. 수신자를 나타내는 String을 응답하라. 대부분 객체의 경우 단순히 그것의 #printOn: 표현에 해당하지만, 문자열과 문자의 경우 불필요한 달러나 큰따옴표 쌍이 제거된다.

displayString

수신자를 나타내는 String을 응답하라. 대부분 객체의 경우 단순히 그것의 #printString 표현에 해당하지만, 문자열과 문자의 경우 불필요한 달러나 큰따옴표 쌍이 제거된다.

printOn: aStream

수신자의 표현을 aStream 상에 인쇄하라..

storeLiteralOn: aStream

수신자와 같은 부호로 컴파일하는 스몰토크 코드를 aStream 상에 인쇄하라.

storeOn: aStream

수신자와 같은 부호로 컴파일하는 스몰토크 코드를 aStream 상에 인쇄하라.


Symbol: 검사하기

isSimpleSymbol

수신자를 인용 문자열 (예: #'abcdef') 형태로 표현해야 하는지 응답하라.


Symbol: 기능 검사하기

isString

'false'를 응답하라.

isSymbol

항상 'true'를 응답하라.


Notes