次のコードを実行しました。構文とパターンで多くの繰り返しが見られます (一時変数 r を何度も使用し、nil でない場合は文字列を追加するなど)。これをもっとDRYにするにはどうすればよいですか?私は C のバックグラウンドを持っており、Ruby の抽象化および単純化してエレガントなコードを取得する方法を学ぼうとしました...
# Traverse a matrix spirally
def subm(m)
result=[]
if m.length>1
m[1..-2].each {|a| result << a[1..-2]}
end
result
end
def trav_sp(m)
result=[]
if not m.empty?
result += m[0] if m[0]
r=[]
m[1..-1].each {|a| r << a[-1]} if m[1..-1]
result += r
r=[]
if m[-1]
m[-1].each_with_index{|a,i| (r<< m[-1][-2-i] if m[-1][-2-i])}
result += r
end
r=[]
m.each_with_index {|a,i| (r<< m[0][-2-i] if m[0][-2-i])}
result += r
return result = result + trav_sp(subm(m))
else
return result
end
end