我是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
答案 0 :(得分:1)
关于此主题的每Avdi Grimm's article,关键字and
和or
用于ruby中的流控制运算符,而不是布尔运算符。
enum.nil? and return
与return unless enum.nil?
相同,这是正确的。我同意你的观点,在这种情况下使用unless
会更具可读性。
这种模式在ruby中不是 uncommon ,这样做的原因是通过利用and
运算符的低优先级来显示流控制的意图。由于此运算符的优先级较低,因此它允许您添加更多与后续and
链接的操作,而不会与可能在同一行代码中执行的其他操作冲突。但是,大多数人会考虑使用if
明确地控制条件来控制流量。