如何干掉这个Ruby代码?

时间:2014-05-30 21:31:11

标签: ruby switch-statement

以下是代码:

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将是整个案例,我们只会返回一些内容。

我的脑袋在哪里,但我无法想象如何。

1 个答案:

答案 0 :(得分:-1)

您当前的代码有重复,例如:

j.typej.priority,但两次都检查了。{ value不是字符串'0'。

稍后再次使用相同的方法。这似乎是多余的。

最重要的是,在不需要时使用类变量 为了它。我建议不要使用类变量。

开始想要优化它并不是一个好的代码。

您的数据结构不必要地复杂化。

当您简化所有数据结构时,代码将会 几乎自动化变得更加简单。