什么是Crystal的Char :: Reader被定义为Struct而不是Class?

时间:2017-12-06 01:51:06

标签: crystal-lang

Char::Reader在标准库中定义为Struct。选择Struct而不是Class背后的原因是什么?

1 个答案:

答案 0 :(得分:1)

我认为这是出于性能原因而选择的。根据{{​​3}}:

  

结构主要用于性能原因,以避免在传递小副本时大量小内存分配可能更有效。

     

那么如何在结构和类之间进行选择?经验法则是,如果没有重新分配实例变量,即你的类型是不可变的,你可以使用结构,否则使用类。

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