在Block(self)Ruby中获取Block的名称

时间:2013-06-26 20:49:44

标签: ruby block self proc

我想知道如何在块中获取块/ proc的名称,然后将其传递给方法。我需要这样一个块的名称:

method("hello") do
  puts "My name is #{self}"
end

这会打印出类似方法运行块时的内容:

"My name is #<Proc:0xa3de668@/path/to/file.rb:8>"

2 个答案:

答案 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...@...>