3

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

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

当方法运行块时会打印出类似的东西:

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

2 回答 2

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!" }
于 2013-11-07T11:12:06.930 回答
0

不能对块执行此操作,但对于 procs ......

def hello
  puts yield
end

my_proc = Proc.new {"I am #{my_proc}"}

method("hello").call(&my_proc)

#I am <#Proc:0x0...@...>
于 2013-07-10T03:38:47.000 回答