如何简化这个简单的任务?

时间:2012-01-06 20:36:26

标签: ruby-on-rails ruby

如何使这更清晰,更简洁?

def right_menu_link(name, url, css_class = nil)
  css_class += " arrow" if css_class
  css_class = "arrow" unless css_class
  # ... rest of code
end

我至少想出了这个:

def right_menu_link(name, url, css_class = nil)
  css_class ||= []; css_class << " arrow"
  # ... rest of code
end

4 个答案:

答案 0 :(得分:1)

这样可以解决问题:

css_class = css_class ? "arrow" : css_class + " arrow"

它被称为ternary operation

答案 1 :(得分:1)

使用三元运算符

css_class = css_class ? " arrow" : css_class + " arrow"

答案 2 :(得分:1)

def right_menu_link(name, url, css_class = nil)
  css_class = [*css_class] << ' arrow'
end

总是很高兴知道你的splats。 此外,与使用三元运算符相比,您避免使用条件。

EDIT正如所指出的,ruby版本&lt; 1.9将nil保留在数组中。较新版本忽略了nil,如示例中所示。

答案 3 :(得分:0)

我知道它不太酷,因为它只能在有效的情况下工作,即缺少参数或提供的数组。

def right_menu_link(name, url, css_class = [])
  css_class << ' arrow'
end