Ruby 什么是&of&;:你在做什么?

Ruby 什么是&of&;:你在做什么?,ruby,symbols,proc,Ruby,Symbols,Proc,我正在查看某人的ruby代码,他们在其中编写了类似的内容: class Example attr_reader :val def initialize(val) @val = val end end def trigger puts self.val end anArray = [Example.new(10), Example.new(21)] anArray.each(&:trigger) :触发器意味着符号被提取,&将其转换为过程 如果这是正确的,除了

我正在查看某人的ruby代码,他们在其中编写了类似的内容:

class Example
  attr_reader :val
  def initialize(val)
    @val = val
  end
end

def trigger
  puts self.val
end

anArray = [Example.new(10), Example.new(21)]
anArray.each(&:trigger)
:触发器
意味着符号被提取,
&
将其转换为
过程

如果这是正确的,除了使用
self.
,还有没有其他方法将变量传递到触发器中

这是相关的,但从未回答过:

Symbol#to_proc
是调用无参数方法的快捷方式。如果需要传递参数,请使用完整表单

[100, 200, 300].map(&:to_s) # => ["100", "200", "300"]
[100, 200, 300].map {|i| i.to_s(16) } # => ["64", "c8", "12c"]
有没有办法将变量传递到触发器中

没有

您正在调用
Symbol#to_proc
,这不允许您指定任何参数。这是Ruby为调用不带参数的方法而专门提供的一点便利

如果需要参数,则必须使用完整的块语法:

anArray.each do |i|
  i.trigger(arguments...)
end

这将完全满足您的需要:

def trigger(ex)
  puts ex.val
end

anArray = [Example.new(10), Example.new(21)]
anArray.each(&method(:trigger))
# 10
# 21

我在文件里找不到这个,你是怎么学会的/我自己能学会吗?谢谢。谷歌“符号到程序”。第二个链接是到。很好,我只是尝试了
&:
,因此没有找到任何东西,包括该文档中的
(&:to)
。相关问题:谢谢@andrewgrim,这增加了它的深度。还相关: