2013-06-26 24 views
2

我想知道如何獲得一個塊的/ proc的名字,而在塊將被傳遞給方法。我需要一個塊的名稱,像這樣:get塊的名字,而在塊(個體經營)紅寶石

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

這將打印出的東西時,該方法運行塊,如:

"My name is #<Proc:[email protected]/path/to/file.rb:8>" 
+2

你真的只想在塊的源代碼中的位置?塊(以及一般的Proc)並沒有真正的名字。 –

+0

也許你可以得到一個proc的名字,但是你不能得到一個塊的名字,因爲block不是一個Ruby對象。 – sawa

回答

0

無法爲塊做到這一點,但對於特效.. 。

def hello 
    puts yield 
end 

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

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

#I am <#Proc:[email protected]> 
1

你可以通過調用Proc.new(裏面的方法),而無需提供塊的方法產量-ING它,裏面的隱式傳遞塊的參考。例如:

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!" }