1
Char::Reader은 표준 라이브러리에서 Struct
으로 정의됩니다. Class
대신 Struct
을 선택하는 이유는 무엇입니까?Crystal의 Char :: Reader는 Class가 아닌 Struct로 정의되어 있습니까?
Char::Reader은 표준 라이브러리에서 Struct
으로 정의됩니다. Class
대신 Struct
을 선택하는 이유는 무엇입니까?Crystal의 Char :: Reader는 Class가 아닌 Struct로 정의되어 있습니까?
나는 그것이 성능상의 이유로 선택되었다고 생각한다. 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
감사합니다. 또한, 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 –