使用条件

时间:2016-01-13 15:36:04

标签: ruby

我有这段代码:

if @locale
    HighVoltage.content_path = "#{@template_to_use}/pages/#{@locale}/"
else
    HighVoltage.content_path = 'pages/'
end

现在我有了这个版本:

HighVoltage.content_path = @locale ?
    "#{@template_to_use}/pages/#{@locale}/" :
    'pages/'

编写这段代码的建议方法是什么,第一版或第二版,或者可能是其他版本

3 个答案:

答案 0 :(得分:12)

在我看来,这是最好的选择:

HighVoltage.content_path = 
  if @locale
    "#{@template_to_use}/pages/#{@locale}/"
  else
    'pages/'
  end

您不会像在您提供的第一个示例中那样使用HighVoltage.content_path =重复自己。 有些人确实觉得我的方法看起来有点难看。如果你相信的话,你可以使用它。

如果需要多行,最好不要使用A ? B : C语句。

有关详细信息,请参阅https://github.com/bbatsov/ruby-style-guide#use-if-case-returns

答案 1 :(得分:2)

根据红宝石风格指南,这是首选

HighVoltage.content_path =
  if @locale
    "#{@template_to_use}/pages/#{@locale}/"
  else
    'pages/'
  end

https://github.com/bbatsov/ruby-style-guide#use-if-case-returns

答案 2 :(得分:2)

为什么不为三元使用单行?

HighVoltage.content_path = @locale ? "#{@template_to_use}/pages/#{@locale}/" : 'pages/'

我认为要么是可读的,要么只是一个偏好的问题......如果你想减少代码行,可以使用第三个选项,如果你喜欢第一个选项的可读性,那么就使用它。