GnuSmalltalkUsersGuide:BaseChapter 156
- 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'를 응답하라.