def conjoin(*args, &block)
return first.to_s if size < 2
options = (Hash===args.last) ? args.pop : {}
spacing = options.delete(:space) || 0
spacer = options.delete(:spacer) || " "
space = spacer * spacing.to_i
sep = []
if block_given?
(size - 1).times do |i|
sep << space + yield(i, *slice(i,2)) + space
end
else
separator = args.shift || " "
options[-1] = args.shift if args.first
options[0] = options.delete(:first) if options.key?(:first)
options[-1] = options.delete(:last) if options.key?(:last)
separator = space + separator + space
sep = [separator] * (size - 1)
options.each{|i, s| sep[i] = space + s + space}
end
zip(sep).join
end