私は現在、次のようなコードを持つプロジェクトに取り組んでいます。
# 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 ステートメントを実行するために、unless 演算子を使用します。何らかの理由で、このコードは isであっても実行されます。実行すると、次のメッセージが表示されます。@ident_a_node
nil
IdentANode.rb:14:in
collect': undefined method
collect' for nil:NilClass (NoMethodError)
これは私を混乱させます。なぜなら、unless キーワードがこれを防ぐと思っていたからです。ステートメントを次の形式に変更すると、次のようになります。
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 ステートメントは実行されません。これら 2 つのステートメントに違いがあるのはなぜですか? unless
キーワードに複数の条件があると問題が発生しますか?
任意のアイデアをいただければ幸いです