에서 확장되었습니다. 모듈이 루비에서 확장 된 위치를 파악하려고합니다. 지금 당장 올 수있는 유일한 방법은 caller
을 사용하고 적절한 줄을 고르는 것입니다. 그것을 다루기 위해 더 관용적이고 부서지기 쉬운 방법이 있습니까?루비 : 모듈이
module ClassMethods
def self.extended(base)
p caller[2]
end
end
나는 개인적으로이 같은 뭔가를 갈 것
에서 확장되었습니다. 모듈이 루비에서 확장 된 위치를 파악하려고합니다. 지금 당장 올 수있는 유일한 방법은 caller
을 사용하고 적절한 줄을 고르는 것입니다. 그것을 다루기 위해 더 관용적이고 부서지기 쉬운 방법이 있습니까?루비 : 모듈이
module ClassMethods
def self.extended(base)
p caller[2]
end
end
나는 개인적으로이 같은 뭔가를 갈 것
(OP의 의견에 따라) :
module ClassMethods
end
class Object
def extend_with_path(mod, filename)
p filename
self.extend(mod)
end
end
class Foo
extend_with_path ClassMethods, __FILE__
end
당신이 base
클래스의 내부 지식을 가지고 가정, 당신은 이런 식으로 뭔가를 시도 할 수 :
module ClassMethods
def self.extended(base)
p base.new.method(:superfluous_method).source_location
end
end
class Foo
def superfluous_method
end
extend ClassMethods
end
추신 : 나는 이것이 거대 해킹이며 매우 좋지 않다는 것을 알고 있으며, 나는 거기 있는지 알고 싶어한다. 이런 식으로하는 더 좋은 방법입니다.
니스, 그 시점에서 나는 문자 그대로 모듈을위한 경로를 대신 정의 할 수 있습니다 :'class Foo; FILE_PATH = __FILE__; extends ClassMethods; 끝 '. – lobati
감사합니다. 내 접근 방식이 너무 고통 스럽다면 나는 아마 그런 식으로 바꿔 치기를 할 것입니다. https://github.com/mockdeep/configurator/commit/03f208 – lobati
죄송합니다. 이전 답변을 삭제했습니다. "그래, 아주 좋은 지적인데, 그럴 경우 정직하게 파일 이름을 전달하는 대신 일정한." – Rashmirathi
파일 이름을 찾으시겠습니까? 또는 특정 라인 번호를 찾으려고합니까? – Rashmirathi
방금 파일 경로를 찾고 있습니다. 줄 번호 걱정하지 마라. – lobati
진단 목적과 같이 궁금한가요? 실제 코드에서 이런 종류의 것을 사용하는 것은 문제가 될 수 있습니다. – tadman