如何使用&amp ;:符号表示法和地图以及自定义方法?

时间:2014-09-08 16:35:45

标签: ruby

我有以下代码:

def add_one(el)
  el += 1
end

p [1,2,3].map { |el| add_one(el) }
p [1,2,3].map(&:add_one)

当我尝试&:add_one时,我得到map: private method add_one called for 1:Fixnum (NoMethodError)

我在这里缺少什么?如何使用&:表示法调用add_one?

3 个答案:

答案 0 :(得分:2)

将符号转换为proc的&符号不起作用。它创建了一个块,传递给它的参数是方法调用的 receiver ,而不是参数。

p [1,2,3].map(&:add_one)
# is equivalent to this
p [1,2,3].map { |el| el.add_one }
  

如何使用&:表示法调用add_one?

你没有。在这种情况下,您根本不会使用简写形式。没有理由。

答案 1 :(得分:1)

实际上,您可以使用method方法为&:上的方法执行与self类似的操作:

def add_one(el)
  el += 1
end

p [1,2,3].map(&method(:add_one))
# [2, 3, 4]

答案 2 :(得分:0)

如果您有Active Record关系 例如,对于具有字段的用户:name,:age,:address 你可以用它:

users = User.all

所以你可以使用&:...

users.map(&:name) # => ['John', 'Oleg', 'Egor']

相同

users.map { |user| user.name }