254: def diff(seq1, seq2, callbacks = nil, &block)
255: callbacks ||= Diff::LCS::DiffCallbacks
256: if callbacks.kind_of?(Class)
257: cb = callbacks.new rescue callbacks
258: callbacks = cb
259: end
260: traverse_sequences(seq1, seq2, callbacks)
261: callbacks.finish if callbacks.respond_to?(:finish)
262:
263: if block_given?
264: res = callbacks.diffs.map do |hunk|
265: if hunk.kind_of?(Array)
266: hunk = hunk.map { |block| yield block }
267: else
268: yield hunk
269: end
270: end
271: res
272: else
273: callbacks.diffs
274: end
275: end