2017-12-06 6 views

답변

1

나는 그것이 성능상의 이유로 선택되었다고 생각한다. docs에 따르면 :

구조체는 작은 복사본을 전달할 때 많은 메모리 할당을 피하기 위해 성능상의 이유로 주로 사용됩니다.

그래서 구조체와 클래스 중에서 어떻게 선택합니까? 어림짐작은 인스턴스 변수가 다시 할당되지 않으면 (즉, 유형이 변경 불가능한 경우) 구조체를 사용하고, 그렇지 않으면 클래스를 사용할 수 있다는 것입니다. (재 할당 인스턴스 변수를 가지고 있기 때문에)

Char::Reader은 가변이지만, 컴파일러 내부는 reader이 구조체 경우에도 일을 할 수있을만큼 안전 할 것 같다 :

reader = Char::Reader.new(pattern) 
while reader.has_next? 
    char = reader.current_char 
    reader = check_char reader, char 
    reader.next_char 
end 
+1

감사합니다. 또한, stdlib JSON 렉서 (문자열 용)는 이것을 인스턴스 var (즉,'@reader = Char :: Reader.new (str)')로 사용하여 참조로 변환합니다 :'@ reader.next_char'. 출처 : https://github.com/crystal-lang/crystal/blob/master/src/json/lexer/string_based.cr –