如何改进这个ruby代码更惯用?

时间:2012-12-26 13:36:10

标签: ruby

由于下面的代码看起来很古老而且丑陋。但玩这种方式之后才有效。

def duplicated? url
  found = false
  current_user.bookmarks.each do |bookmark|
    if bookmark.url.eql? url
      found = true
    end
  end
  found
end

我删除了本地var found和if语句,如此

def duplicated? url
  current_user.bookmarks.each do |bookmark|
    bookmark.url.eql? url
  end
end

它会返回错误的预期结果。

知道如何改进吗?谢谢

2 个答案:

答案 0 :(得分:10)

我认为你需要Enumerable#any?。应该首选map / include对,因为它不会创建临时数组,并且会在找到的第一个元素上提前返回。

def duplicated? url
  current_user.bookmarks.any?{|b| b.url.eql? url }
end

答案 1 :(得分:2)

def duplicated?(url)
   current_user.bookmarks.map{|bm| bm.url}.include?(url)
end