我刚刚做了以下代码。我在语法和模式上看到了很多重复(比如一次又一次地使用临时变量 r,并在它不是 nil 时附加字符串)。我怎样才能使这个更干燥?我来自 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