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

Ruby 人会因为我这样写而嘲笑我吗?它似乎不像我见过的一些 Ruby 代码那样特别简洁。

4

6 回答 6

10

这在我看来完全合理。您可以将赋值移到 if ( ) 前面parent_id = if params...或使用三元组,但我认为结果看起来不会更好。

如果 parent_id 在该行之前为 nil 或未定义,您可以简单地编写:

parent_id = params[:parent_id] unless params[:parent_type] == "Order"
于 2009-09-01T19:13:48.213 回答
7

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

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

或者:

parent_id = if (params[:parent_type] == "Order")
    nil
else
    params[:parent_id]
end
于 2009-09-01T19:10:17.550 回答
5

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

于 2009-09-01T19:10:55.317 回答
2

我喜欢:

parent_id = (params[:parent_type] == "Order" ? nil : params[:parent_id])
于 2009-09-01T21:22:13.273 回答
1

另一种变化:

parent_id = (params[:parent_type] == "Order") && params[:parent_id]
于 2009-09-01T23:21:30.773 回答
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编码方式,我发现了一篇很棒的文章

于 2017-04-22T01:14:47.487 回答