昨晚我在一个项目中遇到了这个问题,同时写了一个助手来根据文件扩展名选择一个图标,并且想知道是否有更好的(更“红宝石”)处理方法?有没有更好的方法来执行多个包含?红宝石选择?
的代码目前云一样的东西:
def choose_icon(myfile)
icon = "default-icon"
if ["*.doc","*.docx",".txt","*.dot"].include? File.extname(myfile)
icon = "doc-icon"
end
if ["*.xls","*.xlsx","*.xlt"].include? File.extname(myfile)
icon = "sheet-icon"
end
if ["*.mp3","*.aac","*.aiff","*.wav"].include? File.extname(myfile)
icon = "audio-icon"
end
if ["*.mov","*.m4a","*.wmv"].include? File.extname(myfile)
icon = "movie-icon"
end
icon # return the chosen icon
end
这在某种程度上感觉有点笨拙和不雅给我,我挣扎着寻找更好的方式来做到这一点的红宝石。
(注:上面的例子实在是简化和实际的代码是远远更长,看起来更加整洁了。)
这将是非常酷的,如果“情况”结构会像这样工作:
def choose_icon(myfile)
case File.extname(myfile)
when ["*.doc","*.docx",".txt","*.dot"].include?
"doc-icon"
when ["*.xls","*.xlsx","*.xlt"].include?
"sheet-icon"
when ["*.mp3","*.aac","*.aiff","*.wav"].include?
"audio-icon"
when ["*.mov","*.m4a","*.wmv"].include?
"movie-icon"
else
"default-icon"
end
end
但当然,这是行不通的。虽然阅读起来非常容易,但是我想知道是否我错过了一些其他方法来对一系列选项进行多重比较,这些选项将恢复我的代码的一些优雅和可读性?
哈!感谢你 - 不知何故,我已经完全忘记了我可以为每个这样的“时间”提供多个结果。感谢让我的代码再次优雅! ;) – CyberFerret
@CyberFerret没问题。再次编辑是因为我认为星号不正确。 –
更新:你对这个星号也是对的。我刚刚检查了我的实际代码,他们不在那里 - 我在今天早上手动重新输入了这段代码,经过长时间的编码,并放入星号,因为braindead! :D – CyberFerret