我对 ruby 知之甚少,我的以下实现很有效,但我真的觉得这种方法有些限制
@surfaces = []
Surface.all.each do |surface|
@surfaces << surface.name
end
目的是提取每个表面对象的名称值并将它们形成一个数组,有人能告诉我这样做的聪明方法吗?谢谢
我对 ruby 知之甚少,我的以下实现很有效,但我真的觉得这种方法有些限制
@surfaces = []
Surface.all.each do |surface|
@surfaces << surface.name
end
目的是提取每个表面对象的名称值并将它们形成一个数组,有人能告诉我这样做的聪明方法吗?谢谢
您可以使用Surface.all.collect(&:name)
.
编辑:这相当于做这样的事情:
Surface.all.collect do |s|
s.name
end
用于Enumerable#map
通过元素的一对一映射将一个可枚举转换为另一个可枚举。Symbol#to_proc
当映射涉及对输入可枚举的每个元素简单地调用单个方法时,结合使用。
这两个是等价的:
@surfaces = Surface.all.map(&:name)
@surfaces = Surface.all.map do |surface|
surface.name
end
仅供参考,收集别名并将其映射到 Ruby 中的相同内部模式。
这是堆栈流参考:Ruby 中 map 和 collect 的区别?