$0
是頂級Ruby程序的變量,但是當前方法是否有一個變量?獲取當前執行方法的名稱
回答
甚至比我的第一個答案你可以更好的使用__METHOD__:
class Foo
def test_method
__method__
end
end
這將返回一個符號 - 例如,:test_method
。要將方法名稱作爲字符串返回,請改爲調用__method__.to_s
。
注意:這需要Ruby 1.8.7。
':'只是符號的象徵。 :) 只是`__method __。to_s`它將成爲方法的名稱,沒有別的 – Lambart 2013-09-25 23:39:55
從http://snippets.dzone.com/posts/show/2785:
module Kernel
private
def this_method_name
caller[0] =~ /`([^']*)'/ and $1
end
end
class Foo
def test_method
this_method_name
end
end
puts Foo.new.test_method # => test_method
這對我來說非常有用,可以找到*調用*的名稱(與當前的方法相反)。 – Lambart 2013-09-27 00:50:43
`__callee__`不是這樣嗎? – 2015-05-22 16:32:48
偉大的解決方案馬克 現在最好的解決方案。偉大的工作 – jonathanccalixto 2016-09-19 08:13:32
爲Ruby 1.9+我推薦使用__callee__
我得到了同樣的問題,在視圖文件檢索方法名。我通過
params[:action] # it will return method's name
的解決方案,如果你想獲得控制器的名稱,然後
params[:controller] # it will return you controller's name
取決於你真正想要的東西,你可以使用__method__
或__callee__
,它會返回當前執行方法的名稱一個符號。
關於紅寶石1.9,他們都表現相同(至於docs和我的測試)。
關於Ruby 2.1 & 2.2 __callee__
行爲會有所不同,如果你調用方法定義的別名(見略有不同doc description)
測試腳本:
require 'pp'
puts RUBY_VERSION
class Foo
def orig
{callee: __callee__, method: __method__}
end
alias_method :myalias, :orig
end
pp({call_orig: Foo.new.orig, call_alias: Foo.new.myalias})
1.9.3輸出:
1.9.3
{:call_orig=>{:callee=>:orig, :method=>:orig},
:call_alias=>{:callee=>:orig, :method=>:orig}}
2.1.2輸出(__callee__
返回別名,但是__method__
ret在方法被定義的點上甕名):
2.1.2
{:call_orig=>{:callee=>:orig, :method=>:orig},
:call_alias=>{:callee=>:myalias, :method=>:orig}}
- 1. 獲取當前正在執行的方法的名稱
- 2. 在dotnet核心中獲取當前執行方法的名稱
- 3. 獲取當前正在執行的當前線程的方法名稱
- 4. 獲取當前方法的名稱
- 5. 在JUNIT @Before中獲取當前正在執行的@Test方法的名稱
- 6. 在運行時獲取當前調用方法的名稱
- 7. Mbunit - Gallio。獲取當前正在執行的測試的名稱
- 8. 獲取當前正在執行的測試測試的名稱?
- 9. 函數獲取當前執行文件的目錄名稱
- 10. 如何顯示當前執行的測試方法的名稱
- 11. 獲取當前MembershipProvider名稱
- 12. 如何在squeak中獲取當前方法的名稱?
- 13. 如何在Delphi 7中獲取當前方法的名稱?
- 14. android獲取多態方法的當前活動名稱
- 15. 獲取當前的方法名稱包含/要求
- 16. py.test:如何從setup方法獲取當前測試的名稱?
- 17. 在C++中獲取當前方法的名稱
- 18. 如何在靜態方法中獲取當前類的名稱?
- 19. 如何獲取當前控制器的名稱和方法?
- 20. T4獲取當前解決方案的執行文件名
- 21. 獲取在特定線程中執行的方法的名稱
- 22. 從異步函數中獲取當前方法名稱?
- 23. 獲取當前正在執行的方法
- 24. 獲取當前$ _GET變量的名稱
- 25. 獲取當前類的名稱
- 26. 獲取當前表格的名稱
- 27. 獲取當前VBA函數的名稱
- 28. 獲取當前類的名稱
- 29. 獲取當前組件的名稱
- 30. 獲取當前課程的名稱?
一個用途是檢查`super`是否可以在SimpleDelegator對象中調用:`def description; __getobj __。respond_to?(__ method__)?超級:'沒有描述';結束' – Kris 2013-09-26 13:57:39