将AND用作逻辑门是否被视为良好做法?

时间:2014-04-14 19:39:27

标签: ruby conditional-statements

我是ruby和编程的新手。在通过“The Well-Grounded Rubyist”一书的过程中,我从set.rb标准库中看到了这个表达式:

enum.nil? and return

这似乎是一种奇怪的(但很聪明的)方法:

return unless enum.nil?

这是一种常见的技术吗?另外,为什么这样呢?我错过了什么吗?

以下是完整的代码段:

def initialize(enum = nil, &block)
  @hash ||= Hash.new

  enum.nil? and return

  if block
    do_with_enum(enum) { |o| add(block[o]) }
  else
    merge(enum)
  end
end

1 个答案:

答案 0 :(得分:1)

关于此主题的每Avdi Grimm's article,关键字andor用于ruby中的流控制运算符,而不是布尔运算符。

enum.nil? and returnreturn unless enum.nil?相同,这是正确的。我同意你的观点,在这种情况下使用unless会更具可读性。

这种模式在ruby中不是 uncommon ,这样做的原因是通过利用and运算符的低优先级来显示流控制的意图。由于此运算符的优先级较低,因此它允许您添加更多与后续and链接的操作,而不会与可能在同一行代码中执行的其他操作冲突。但是,大多数人会考虑使用if明确地控制条件来控制流量。