Ruby 如何将地图与收件人结合?

Ruby 如何将地图与收件人结合?,ruby,Ruby,我正在使用Mongoid并检索一组BSON::ObjectId实例。理想情况下,我希望在检索时将它们转换为字符串。正确的语法是什么?可以用两行代码完成,如下所示: foo = Bar.where(:some_id => N).map(&:another_id) ids_as_strings = foo.map(&:to_s) 在上面的map调用之后,正确的Ruby链接到\u s的方法是什么?您可以直接链接它: ids_as_string = Bar.where(:some

我正在使用Mongoid并检索一组
BSON::ObjectId
实例。理想情况下,我希望在检索时将它们转换为字符串。正确的语法是什么?可以用两行代码完成,如下所示:

foo = Bar.where(:some_id => N).map(&:another_id)
ids_as_strings = foo.map(&:to_s)

在上面的map调用之后,正确的Ruby链接
到\u s
的方法是什么?

您可以直接链接它:

ids_as_string = Bar.where(:some_id => N).map(&:another_id).map(&:to_s)
我用一个模型试了一下,得到了你期望的结果,比如:

["1", "2", ...]

这很好,但不要这样做

ids_as_string = Bar.where(:some_id => N).map(&:another_id).map(&:to_s)
它看起来确实很酷,但想想看,你正在绘制两张地图。映射用于在数组或其他对象上循环,并将在每个位置进行操作,检索新数组或其他对象,并获得结果

那么,如果要执行两个操作,为什么要执行两个循环呢

ids_as_string = Bar.where(:some_id => N).map {|v| v.another_id.to_s}
在这种情况下,这应该是一种方式,实际上看起来更好。

我认为“不要这样做”可能是一个过于强烈的建议,但指出这种影响和替代方案是很好的。我不认为“不要这样做”太强,重要的是开发人员要理解解决方案的工作原理,在实践中争取尽可能好的表现是很重要的。