我想知道如何在块中获取块/过程的名称,然后将其传递给方法。我需要这样的块的名称:
method("hello") do
puts "My name is #{self}"
end
当方法运行块时会打印出类似的东西:
"My name is #<Proc:0xa3de668@/path/to/file.rb:8>"
Proc.new
您可以通过调用(在方法内部)而不提供块来获取对方法内部隐式传递的块的引用,从而产生它。例如:
def speak
puts yield
block = Proc.new # Creates a proc object from the implictly passed block.
puts block.call
end
speak { "Hello, from implicit block!" }
不能对块执行此操作,但对于 procs ......
def hello
puts yield
end
my_proc = Proc.new {"I am #{my_proc}"}
method("hello").call(&my_proc)
#I am <#Proc:0x0...@...>