ix = 0, iy = 0
переводится в ix = [0, (iy = 0)]
, поэтому вы получаете ошибку типа.
Однако есть менее «процедурный» способ сделать то, что вы хотите сделать:
Для рубина 1.8.7 +:
"hello world".each_byte.each_slice(3).to_a
#=> [[104, 101, 108], [108, 111, 32], [119, 111, 114], [108, 100]]
Для рубина 1.8.6:
require 'enumerator'
"hello world".enum_for(:each_byte).enum_for(:each_slice, 3).to_a