Ruby on rails 处理两个项目而不是一个项目的符号
我经常这样做:Ruby on rails 处理两个项目而不是一个项目的符号,ruby-on-rails,ruby,Ruby On Rails,Ruby,我经常这样做: m51.items.map(&:id) 但是我想为我的符号做两个元素。语法是什么?我试过了 m51.items.map(&[:instore_image_url, :id]) 但它不起作用。这是一个RoR应用程序,所以如果Rails是特定的,那没关系。映射到proc将只映射到一个方法。你不能给它一个数组。 您有两个选择: 使用map的非proc版本: m51.items.map {|i| [i.instore_image_url, i.id] } 或者在项目
m51.items.map(&:id)
但是我想为我的符号做两个元素。语法是什么?我试过了
m51.items.map(&[:instore_image_url, :id])
但它不起作用。这是一个RoR应用程序,所以如果Rails是特定的,那没关系。映射到proc将只映射到一个方法。你不能给它一个数组。 您有两个选择: 使用map的非proc版本:
m51.items.map {|i| [i.instore_image_url, i.id] }
或者在项目上创建一个新方法,该方法返回两个内容并调用:
# preferably give it a more meaningful name than this
def url_and_id
[self.instore_image_url, self.id]
end
m51.items.map(&:url_and_id)
嗯,
Symbol#to_proc
不起作用的明显原因是,您试图将数组
转换为proc
,而不是符号
。因此,您需要一个合适的数组来处理。大概是这样的:
class Array
def to_proc
-> el { map(&el.method(:public_send)) }
end
end
Item = Struct.new(:instore_image_url, :id, :doesnt_matter)
items = [Item.new('foo.jpg', 23, :bla), Item.new('bar.gif', 42, :blub)]
items.map(&[:instore_image_url, :id])
# => [['foo.jpg', 23], ['bar.gif', 42]]
然而,这真是个坏主意。现在还不清楚Array#to_proc
到底是什么意思。在野外有一些Array#to_proc
的实现,但大多数都将和[:one,:two]
解释为\uone.two
,而不是[\uone,\uo2]
。从数学上讲,数组
同构于从整数
s到元素的函数,因此唯一有意义的明显实现是:
class Array
def to_proc
method(:[]).to_proc
end
end
[2, 2, -1, 0, 0].map(&[:one, :two, :three])
# => [:three, :three, :three, :one, :one]
没办法。你被困在m51.items.map{| item |[item.instore_image_url,item.id]}
Geez,几乎问了同样的问题,这是通过谷歌搜索lol得出的。使用了回答的第二部分谷歌和堆栈溢出。。。节省全世界程序员的时间;)thx,喜欢数组上的黑客——这是一个不错的面试问题,但对于代码来说却相当不透明。非常有帮助的解释,我希望一切顺利。