虽然您可以将返回单线,但这是我认为更明确和可略读的情况之一是值得的。这当然值得商榷,但在与 rubyists 合作过很多不同的团队之后,我认为如果你使用单行版本,那么你(或团队的其他成员)很有可能在查看时误解了潜在的退出状态后面的代码。
我建议:
def ident_list(keys)
id = nil
ident_a_node = nil
## method hidden
return IdentifierListNode.new(id, ident_a_node) unless id.nil?
nil
end
或者,如果您不关心这种情况下 false/nil 之间的区别,那就更好了:
def ident_list(keys)
id = nil
ident_a_node = nil
## method hidden
return IdentifierListNode.new(id, ident_a_node) if id
nil
end
几乎每个在 ruby 中工作过一段时间的人都明白,方法中的最终值是隐式返回的(即,如果事先没有返回,这将返回 nil) - 你可以一目了然。我的经验是,许多长期使用 ruby 的人仍然会被 && 的变化和不太明确的条件返回所困扰。
如果您决心使用单线,我会选择 Ryan 的回答,主要是因为它是一个相当常用且不太可能混淆的成语:
def ident_list(keys)
id = nil
ident_a_node = nil
## method hidden
id && IdentifierListNode.new(id, ident_a_node)
end
这种方法的一个警告是,您实际上最终得到了三种可能的返回状态而不是两种(其他选项只会返回 nil 或您的 new IdentifierListNode
):
- 当 id 为 nil 时,返回值为 nil
- 当 id 为 false 时,返回值为 false
- 当 id 是其他任何东西时,返回值将是您的
IdentifierListNode
对象