我不会在这里重复我的问题,但有更有效的方式来写这个吗?
def recruits_names
names = []
for r in self.referrals do
names << r.display_name
end
return names
end
答案 0 :(得分:51)
使用map
方法:
为枚举中的每个元素返回一个新数组,其中包含一次运行块的结果。
def recruits_names
self.referrals.map { |r| r.display_name }
end
[更新]正如Staelen在评论中指出的那样,这个例子可以进一步缩短为:
def recruits_names
self.referrals.map(&:display_name)
end
对于好奇,这是因为&
在其后面的对象上调用to_proc
(在方法调用中使用时),而Symbol
实现to_proc
以返回Proc
执行由每个值上的符号指示的方法产生的块(参见the documentation)。