以下是代码:
when 'jty'
if j.type != "0"
@color = allColors.find { |c| c['type'] == j.type.to_s }
clr << @color.color if @color
else
clr << @@default_map_marker_color
end
when 'jcat'
if j.priority != "0"
@color = allColors.find { |c| c['type'] == j.priority.to_s }
clr << @color.color if @color
else
clr << @@default_map_marker_color
end
在这种情况下,我还有六个when
语句,我重复这一部分:
clr << @color.color if @color
一遍又一遍。我恨它。
以下是您需要了解的一些事项:
clr
是一个空数组,我在case
语句之外进行初始化,而case
语句位于for
循环中,经历了很多对象它基本上查找了与特定事物相关的颜色,这是我获取关系数据的NoSQL-hack-ish方法。
如果我做的事情如下:
def push_color
clr << @color.color if @color
end
clr
和@color
没有为方法传递params。我只是不喜欢将params传递给我的所有方法 - 它太依赖了。我可以更好地理解这一点并编写没有这些隐式依赖关系的代码。有时候我必须将信息从一种方法传递到另一种方法,但是如果我传递的那个参数发生了变化或消失,那么它会创建一个依赖性来破坏一切,这就是我试图避免的。< / p>
我不明白如何让clr
填充来自case
语句的WHATEVER返回。理想情况下它会是这样的:
clr = pref.map do |p|
p(&:do_the_switch_statement_here)
end
和p
将是整个案例,我们只会返回一些内容。
我的脑袋在哪里,但我无法想象如何。
答案 0 :(得分:-1)
您当前的代码有重复,例如:
j.type
与j.priority
,但两次都检查了。{
value不是字符串'0'。
稍后再次使用相同的方法。这似乎是多余的。
最重要的是,在不需要时使用类变量 为了它。我建议不要使用类变量。
开始想要优化它并不是一个好的代码。
您的数据结构不必要地复杂化。
当您简化所有数据结构时,代码将会 几乎自动化变得更加简单。