Я решил создать свой собственный анализатор CSV в эликсире в качестве учебного проекта и сумел заставить что-то работать без особых хлопот.
Я знаю, что эта проблема была решена в прошлом некоторыми из "лучших" разработчиков эликсира, поэтому я решил посмотреть, как они это сделали.
Iначал искать исходный код модуля эликсира NimbleCSV .Он был написан Хосе Валимом, создателем языка, с участием нескольких известных разработчиков эликсира, поэтому я подумал, что это хороший выбор.
В функции parse_string
они проверяют длину строк с помощьюфункция byte_size(string)
.Я думаю, что понимаю, как работает эта функция.Например,
iex()> byte_size(<<104, 101, 108, 108, 111>>)
5
iex()> byte_size(<<104, 101, 108, 108, 111::9>>)
6
Первая функция - 40 bits
, которая равна 5 bytes
(каждое значение в двоичном файле по умолчанию равно 8 битам в эликсире, если не указано иное)
Во втором яприсваивая одному из значений 9 bits
, таким образом, итоговое значение составляет 41 bits
.Это означает, что это 6 bytes
(из-за округления)
извините, если какой-то язык не совсем правильный
Это имеет смысл для меня.Мой вопрос, почему они выбрали бы эту функцию вместо String.length
в этом случае?Если они просто получают длину строки, оба не вернут одинаковый результат?