From: Dave Snowdon Date: 2006-08-20T20:58:33+09:00 Subject: Newbie block question Hi folks I'm working on some code that extracts data from a set of XML files using REXML stores this as arrays of arrays of floats (one array of floats per file), does some processing and then writes the results to 4 text files for visualisation with gnuplot. However, what happens is that although 4 files get created all the data gets saved in the first one to be opened. It's as if the block in writeMatrix() stores the reference to the first File object and uses that on the other 3 method invocations. If that's the case then I've obviously failed to understand the appropriate way to use a block. What would be a better way to code this in ruby? thanks Dave Here's a portion of the class handling writing the files. class TuneInputData ... snip snip ... def writeData() writeMatrix(@@LUMINANCE_DATA_FILE, @imageVector) writeMatrix(@@VOICE_DATA_FILE, @voiceVector) writeMatrix(@@SOUND_DATA_FILE, @soundVector) writeMatrix(@@RHYTHM_DATA_FILE, @rhythmVector) writeColumn(@@COLOURFULNESS_DATA_FILE, @imageColourfulness) end def writeMatrix(filename, matrix) file = File.new(filename, "w") matrix.each { |row| writeRow(file, row) } end def writeRow(file, row) outString = "" row.each { |v| outString = outString + v.to_s + " " } file.puts(outString) end ... snip snip ... end