2010-05-09 2 views

답변

4

caller 메서드를 사용하고 파일 이름으로 구문을 분석하십시오. inherited은 항상 클래스를 정의하는 파일에서 호출됩니다.

a.rb :

require 'pp' 
class Base 
    def self.inherited(subclass) 
    pp caller 
    end 
end 

b.rb :

$ruby b.rb 
["b.rb:3"] 
+0

감사합니다 켄, 나는 내가 필요한 것 같아요! 분할 = 호출 [0] .split ("") caller_file = 분할 [0] + ":"+ 분할 [1] 풋 ' 은 내가 호출자의 배열에서 파일을 얻기 위해 다음과 같은했다 caller_file = '+ caller_file 음,이 댓글에는 형식이 잘되어 있지 않습니다. –

+0

'caller'는 기본적으로 서브 클래스가 배열의 첫 번째 항목 인 스택 추적의 배열을 반환합니다. (나는 이것을 처음 사용했을 때 이것을 오해했다.) – Andrew

+0

또한, 파일 이름에 대해 호출자를 구문 분석하는 더 간단한 방법은 다음과 같다 :'caller.first [/^[^ :] + /]' – Andrew

-2
File.expand_path(subclass.to_s) 

편집 : 죄송합니다. 원본 파일이 같은 파일에 정의되어 있지 않으면 원본 방식이 작동하지 않는다는 것을 알았습니다.

+3

subclass.to_s가 당신에게를 제공합니다

require './a.rb' class Derived < Base end 

은의이 실행하자

는 다음의 고려 클래스의 이름. 클래스 이름과 파일 이름 사이에는 관계가 없습니다. –

관련 문제