我目前正在开发一个项目,其中的代码如下所示:
# the first return is the one causing problems
def collect
return Hash["IdentANode", Array[@id, ",", @ident_a_node.collect]] unless @ident_a_node.nil? and @id.nil?
return Hash["IdentANode", @id] unless @id.nil?
end
我使用除非运算符有条件地执行 return 语句。由于某种原因,即使is ,此代码仍会执行。执行时我收到此消息:@ident_a_node
nil
IdentANode.rb:14:in
collect': undefined method
collect' for nil:NilClass (NoMethodError)
这让我感到困惑,因为我曾认为除非关键字会阻止这种情况发生。当我将声明更改为这种形式时:
if not @ident_a_node.nil? and not @id.nil?
return Hash["IdentANode", Array[@id, ",", @ident_a_node.collect]]
end
或这种形式:
return Hash["IdentANode", Array[@id, ",", @ident_a_node.collect]] if not @ident_a_node.nil? and not @id.nil?
return 语句没有执行,什么给出?为什么这两种说法有区别?unless
关键字有多个条件会导致问题吗?
任何想法,将不胜感激