我如何在ruby中使用map方法调用方法链?

时间:2013-02-04 15:43:36

标签: ruby

如何在ruby中调用块以使用_id.to_s

category_ids = categories.map(&:_id.to_s)

我正在攻击它并立即执行以下操作:

category_ids = []
categories.each do |c|
  category_ids << c.id.to_s
end

3 个答案:

答案 0 :(得分:8)

您可以传递一个块来映射并将您的表达式放在块中。可枚举的每个成员将连续产生于该区块。

category_ids = categories.map {|c| c._id.to_s }

答案 1 :(得分:2)

category_ids = categories.map(&:_id).map(&:to_s)

测试:

categories = ["sdkfjs","sdkfjs","drue"]
categories.map(&:object_id).map(&:to_s)
=> ["9576480", "9576300", "9576260"]

答案 2 :(得分:0)

如果您真的想链接方法,可以覆盖Symbol#to_proc

*这个答案类似于投票结果。我想知道为什么......

class Symbol
  def to_proc
    to_s.to_proc
  end
end

class String
  def to_proc
    split("\.").to_proc
  end
end

class Array
  def to_proc
    proc{ |x| inject(x){ |a,y| a.send(y) } }
  end
end

strings_arr = ["AbcDef", "GhiJkl", "MnoPqr"]
strings_arr.map(&:"underscore.upcase")
#=> ["ABC_DEF", "GHI_JKL", "MNO_PQR"]

strings_arr.map(&"underscore.upcase")
#=> ["ABC_DEF", "GHI_JKL", "MNO_PQR"]

strings_arr.map(&["underscore", "upcase"])
#=> ["ABC_DEF", "GHI_JKL", "MNO_PQR"]

Ruby ampersand colon shortcut