2017-12-06 8 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 –

関連する問題