我想知道如何在块中获取块/ proc的名称,然后将其传递给方法。我需要这样一个块的名称:
method("hello") do
puts "My name is #{self}"
end
这会打印出类似方法运行块时的内容:
"My name is #<Proc:0xa3de668@/path/to/file.rb:8>"
答案 0 :(得分:1)
您可以通过调用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!" }
答案 1 :(得分:0)
不能对块执行此操作,但对于procs ...
def hello
puts yield
end
my_proc = Proc.new {"I am #{my_proc}"}
method("hello").call(&my_proc)
#I am <#Proc:0x0...@...>