什么是更惯用的Ruby写作方式?

时间:2009-09-01 19:07:27

标签: ruby syntax idioms

  if params[:parent_type] == "Order"
    parent_id = nil
  else
    parent_id = params[:parent_id]
  end

一个Ruby人会嘲笑我这样写吗?它看起来并不像我见过的一些Ruby代码那么简洁。

6 个答案:

答案 0 :(得分:9)

这对我来说非常合理。您可以在if(parent_id = if params...)前面移动作业或使用三元组,但我认为结果看起来不会更好。

如果parent_id在该行之前为nil或未定义,则只需编写:

parent_id = params[:parent_id] unless params[:parent_type] == "Order"

答案 1 :(得分:7)

原样没有什么问题,但可以更简洁:

parent_id = (params[:parent_type] == "Order") ? nil : params[:parent_id]

可替换地:

parent_id = if (params[:parent_type] == "Order")
    nil
else
    params[:parent_id]
end

答案 2 :(得分:5)

我认为它的方式很好。我是一个红宝石的人,我不会因为这样的方式而嘲笑你。很清楚代码的作用是什么,并且没有真正的代码重复,所以我不担心它。

答案 3 :(得分:2)

我喜欢:

parent_id = (params[:parent_type] == "Order" ? nil : params[:parent_id])

答案 4 :(得分:1)

还有一个变种:

parent_id = (params[:parent_type] == "Order") && params[:parent_id]

答案 5 :(得分:0)

我们可以使用Ruby三元运算符。喜欢它的东西:

parent_id = params[:parent_type] == "Order" ? nil : params[:parent_id]

如果parent_id设置了nil值,我们可以编写一个除非语法:

parent_id = params[:parent_id] unless params[:parent_type] == "Order"

或者以不同的方式编写一个简单的Ruby if-else:

parent_id = if (params[:parent_type] == "Order")
  nil
else
  params[:parent_id]
end

对于更多Idiomatic Ruby代码方式,我发现了一个awesome article