programing

현재 실행 중인 메서드의 이름을 가져옵니다.

abcjava 2023. 5. 31. 14:03
반응형

현재 실행 중인 메서드의 이름을 가져옵니다.

$0최상위 Ruby 프로그램의 변수인데, 현재 방법에 변수가 있습니까?

당신이 사용할 수 있는 나의 첫 번째 대답보다 훨씬 더 좋습니다.__method__:

class Foo
  def test_method
    __method__
  end
end

예를 들어 다음과 같은 기호를 반환합니다.:test_method메서드 이름을 문자열로 반환하려면 다음을 호출합니다.__method__.to_s대신.

참고: 이를 위해서는 Ruby 1.8.7이 필요합니다.

실제로 원하는 항목에 따라 다음 중 하나를 사용할 수 있습니다.__method__또는__callee__현재 실행 중인 메서드의 이름을 기호로 반환합니다.

루비 1.9에서는 두 가지 모두 동일하게 동작합니다(문서와 제 테스트에 관한 한).

루비 2.1 & 2.2에서__callee__정의된 메서드의 별칭을 호출하면 다르게 동작합니다. 개의 문서는 서로 다릅니다.

  • __method__"현재 방법의 정의에 있는 이름"(즉, 정의된 이름)
  • __callee__"현재 메서드의 호출된 이름"(즉, 호출된 이름()

테스트 스크립트:

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__메서드가 정의된 지점의 이름을 반환합니다.):

2.1.2
{:call_orig=>{:callee=>:orig, :method=>:orig},
 :call_alias=>{:callee=>:myalias, :method=>:orig}}

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

Ruby 1.9+의 경우 다음을 사용하는 것이 좋습니다.__callee__

뷰 파일에서 메서드 이름을 검색하는 데 동일한 문제가 발생했습니다.제가 해결책을 구했습니다.

params[:action] # it will return method's name

컨트롤러의 이름을 알고 싶다면,

params[:controller] # it will return you controller's name

언급URL : https://stackoverflow.com/questions/199527/get-the-name-of-the-currently-executing-method

반응형