Почему RubyGems FasterCSV обрабатывает [[1,3,5], [2,4,6]]. To_csv как «135,246 \ n» - PullRequest
0 голосов
/ 29 сентября 2010

следующий код:

[1,3,5].to_csv
  => "1,3,5\n"       # this is good

[[1,3,5], [2,4,6]].to_csv
  => "135,246\n"     # why doesn't it just do it for array of array?

, но вместо этого требуется:

data = [[1,3,5], [2,4,6]]
csv_string = FasterCSV.generate do |csv|
  data.each {|a| csv << a}  
end
 => "1,3,5\n2,4,6\n"

или короче:

data = [[1,3,5], [2,4,6]]
csv_string = FasterCSV.generate {|csv| data.each {|a| csv << a}}
 => "1,3,5\n2,4,6\n"

Вопрос в том, когда предоставляется массивмассива, почему to_csv не предназначен для его автоматической обработки, поэтому в Rails мы можем сделать

respond_to do |format|
  format.csv { render :text => data.to_csv }

1 Ответ

1 голос
/ 01 октября 2010

[[1,3,5], [2,4,6]]. Каждая {| строка |ставит line.to_csv} не так уж и плохо.Вы всегда можете переопределить Array # to_csv, если хотите.

Я подозреваю, что решение FasterCSV не реализовывать это потому, что трудно быть абсолютно уверенным, что именно этого захочет программист.Что, если ввод будет [[1], 2, 3, 4]?Просто глядя на первый элемент внешнего массива, вы можете подумать, что это может быть массив массивов ...

...