无法理解ruby

时间:2015-05-24 06:04:06

标签: ruby-on-rails arrays ruby

我正在编写代码,将新电子邮件附加到我的Rails应用程序中的空数组中。像这样:

@users_email = Array.new 
@users_email << User.find_by_id(@comment.user_id).email 
@users_email << User.find_by_id(Comment.find_by_id(@parent_id).user_id).email if !@parent_id.nil?

注意:此处@comment只是id, user_id, parent_id的哈希,@parent_id是任何评论的父级的ID。如在亲子层次结构中一样。

但不是在数组前面有两个项目:["ak@xyz.com", "aks@xyz.com"]我在追加第二个项目后只得到一个项目:["aks@xyz.com"]

当我尝试将上面的表达式保存在Instance变量中并尝试将其附加到空数组中时,我的混乱就开始了。它的行为与预期的一样。 例如:

@users_email = Array.new
@first = User.find_by_id(@comment.user_id).email
@second = User.find_by_id(Comment.find_by_id(@parent_id).user_id).email if !@parent_id.nil?

@users_email << @first  # ["ak@xyz.com"]
@users_email << @second  # ["ak@xyz.com", "aks@xyz.com"]

因为这不是前一个案例。 有人可以解释一下这里发生的事情。

更新

我错误地将"="代替"<<",同时将第一个元素附加到第一个案例的数组中,然后在追加第二个元素后得到类似"ak@xyz.comaks@xyz.com"的结果但是对于某些在我的Rails应用程序中的原因我只在return.ex中获得了第一个电子邮件ID:["ak@xyz.com"]

所以,这个问题可能与提出的问题无关。很抱歉打扰你们所有人。

1 个答案:

答案 0 :(得分:1)

那是因为您在以下声明的末尾有!@parent_id.nil?

 @users_email << User.find_by_id(Comment.find_by_id(@parent_id).user_id).email if !@parent_id.nil?

在第一种情况下,@parent_id显然是nil,因此语句永远不会执行:因此只有一个值附加到数组中。

除此之外:更喜欢using the array literal syntaxary = []而不是ary = Array.new