GnuSmalltalkUsersGuide:BaseChapter 156

From 흡혈양파의 번역工房
Revision as of 07:01, 28 January 2014 by Onionmixer (talk | contribs) (GSUG Symbol 페이지 추가)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
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