読者です 読者をやめる 読者になる 読者になる

Crystal は配列が自動拡張されなくてつらい

Crystal Ruby

これは「Ruby脳にはCrystalつらい Advent Calendar 2015」の1日目の記事です。

qiita.com

Ruby だと配列の範囲外に値を代入すると、

array = [0, 1, 2]
array[4] = 4
array #=> [0, 1, 2, nil, 4]

のように、配列が自動拡張されるのですが、Crystal で同じことをすると例外が発生してつらい。

% crystal a.cr
Index out of bounds (IndexError)
[4346711] *CallStack::unwind:Array(Pointer(Void)) +87
[4346602] *CallStack#initialize<CallStack>:Array(Pointer(Void)) +10
[4346554] *CallStack::new:CallStack +42
[4355503] *Exception +31
[4355437] *IndexError#initialize<IndexError, String>:CallStack +29
[4355377] *IndexError::new<String>:IndexError +97
[4355269] *IndexError::new:IndexError +21
[4342002] *Array(Int32) +98
[4341863] *Array(Int32) +39
[4332833] ???
[4339872] main +32
[139940759222848] __libc_start_main +240
[4330009] _start +41
[0] ???

ちゃんとひとつずつ値を追加するようにしましょう。

array = [0, 1, 2]
array.push 3
array.push 4
array #=> [0, 1, 2, 3, 4]