직장에서 꽤 큰 레일 프로젝트를 작업합니다. 때로는 클래스/상수 정의를 찾아야합니다. Ruby에 내장 된 메소드가 있나요? 예 : 모든 파일 전에 처음에서irb에서 기호가 정의 된 부분보기
irb> SOME_CONSTANT.__file__
=> /some/path/to/a/file
직장에서 꽤 큰 레일 프로젝트를 작업합니다. 때로는 클래스/상수 정의를 찾아야합니다. Ruby에 내장 된 메소드가 있나요? 예 : 모든 파일 전에 처음에서irb에서 기호가 정의 된 부분보기
irb> SOME_CONSTANT.__file__
=> /some/path/to/a/file
정확히 찾고자하는 것이 아니지만 의 메소드에는 .source_location 메소드가 있습니다. 이것을 사용하여 클래스가 실제로 구현 된 위치를 찾을 수 있습니다. , 개체의 인스턴스 주어진 예를 들어
내가 (루비 당신이 수업을 재개 할 수 있기 때문에, 이것은 여러 위치에있을 수 있습니다) :
i.methods.map do |method_name|
method_obj = i.method(m)
file, line = method_obj.source_location
file #map down to the file name
end.uniq
는 당신에게 모든 파일 곳의 목록을 제공합니다 의 메소드가 구현되었습니다.
이 방법은 루비에서 적어도 하나의 메소드가 구현 된 클래스에서 작동합니다. 그래도 상수에서는 작동하지 않습니다.
는 모듈이 아닌 다른 무언가로 확인하려는 클래스/상수를 정의하는 행을 삽입,로드됩니다. 예를 들어 코드 내에 클래스 또는 다른 종류의 상수 A
이 있고 정의 된 위치를 알고 싶다고 가정합니다. 그런 다음 주 파일의 시작에, 먼저 클래스의 정의를 충족 할 때마다 프로그램이 실행되는 다음
A = nil
,/일정 A
쓰기, 그것은
some_path_to_a_file:line_number in `some_method': A is not a class (TypeError)
과 같이 표시됩니다
또는 그런
some_path_to_a_file:line_number: warning: already initialized constant A
,
some_path_to_a_file:line_number
는
A
정의 된 위치 될 것이다.
Ruby 1.9.2를 사용하는 경우 @ YenTheFirst의 대답이 정확합니다. Method 객체에 #source_location
을 호출하십시오.
Ruby 1.8.7을 사용하는 경우 #source_location
은 (아직) 존재하지 않습니다. 방법이 this implementation과 같이 필요합니다. (다른 하나 또는 두 개의 주위에 떠있는있어,하지만 난 다른 하나를 진짜 빨리 찾을 수 없습니다).
http://stackoverflow.com/a/13015691/260122에 따르면'Method # source_location'을 백 포트하는 보석 (ruby18_source_location) (https://github.com/ConradIrwin/ruby18_source_location)이 있습니다. – clacke
디렉토리에서 "SOME_CONSTANT ="에 대한 그렙 만 시도 했습니까? –
...................... 예? –