-1

我正在审查某人的 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)

:trigger表示符号被采用并将其转换&proc?

如果这是正确的,除了使用之外,还有什么方法可以将变量传递给触发器self.吗?

这是相关的,但从未回答: http ://www.ruby-forum.com/topic/198284#863450

4

3 回答 3

2

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

[100, 200, 300].map(&:to_s) # => ["100", "200", "300"]
[100, 200, 300].map {|i| i.to_s(16) } # => ["64", "c8", "12c"]
于 2012-08-07T13:46:16.663 回答
2

有没有办法将变量传递给触发器

不。

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

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

anArray.each do |i|
  i.trigger(arguments...)
end
于 2012-08-07T13:46:23.690 回答
0

这将完全满足您的需要:

def trigger(ex)
  puts ex.val
end

anArray = [Example.new(10), Example.new(21)]
anArray.each(&method(:trigger))
# 10
# 21
于 2014-06-03T09:15:49.130 回答