라이브러리를 필요로하거나로드하는 Ruby 코드 내에서 라이브러리의 소스 코드에 액세스하는 데는 여러 가지 방법이 있습니다. 이러한 방법 중 일부는 라이브러리 파일을 직접 읽고 파싱합니다. 다른 일부는 소스 (예 : 추상 구문 트리)에 대한 정보를 제공하는 내장 된 메소드를 통해 소스에 액세스합니다. 필자가 파일의 내용을 직접 읽을 수있는 권한이없는 경우 (예 : 이전 방법) 소스에 액세스하는 유일한 방법은 정보를 제공하는 기본 제공 방법에 액세스하는 것입니다. 이 메소드를 재정의하여 다른 것을하기 때문에 나는 소스 코드에 대한 접근을 완전히 잃어 버릴 것이다. 최소의 메소드 세트는 무엇인가? 다시 정의하면, 외부 파일에있는 라이브러리의 소스 코드에 대한 액세스가 완전히 해제됩니다. 어떤 방법으로 소스 코드에 액세스 할 수 있습니까?
는
가정 해 질문을 바꿔하려면
- 파일 A에 어떤 루비 코드를 작성할 수 있습니다 사용자가이를
- 에 의해 작성된 정적 루비 파일 B가 나는 파일 A를로드하고 A에 정의 된 기본 루틴을 호출하며 사용자가 A에서 사용할 수있는 몇 가지 클래스/메소드를 정의합니다.
- 사용자가 ha
어떤 표준 Ruby 메소드를 다시 정의 (무효화)해야하거나 불가능하게하기 위해 B 파일에 써서 제거해야합니까? 사용자가 파일 B에서 작성된 소스에 액세스하려면 (파일 A에서 사용자가 작성할 수있는 코드를 통해) 파일 B를 실행할 때?
액세스 할 수있는 메소드의 소스 코드를 추출 할 수있는 sorcerer, pry와 같은 라이브러리가 있습니다. 일반 Ruby에는 원시 코드에 액세스 할 수 있도록하기 위해 이러한 라이브러리가 의존하는 원시 명령어가 있어야합니다. 이런 종류의 일을 가능하게하는 방법은 무엇입니까?
전체 답변을 모르지만 특정 라이브러리가 특정 방법의 소스를 추출하는 방법을 알고 있다면 여전히 도움이됩니다.
나는 어떤 추상 클래스 나 자바에서 인터페이스와 비슷한 것을 구현할 수 있다고 생각한다. 인터페이스는 외부 구성 요소에서 공개적으로 액세스합니다. 그런 다음 추상 클래스를 상속하여 내부적으로 구현할 수 있습니다. –
그런 메소드를 재정의 할 때, 수정중인 원래 메소드의 "복사본"을 가지기 위해'Module # alias_method'를 사용할 수 있습니다. http://apidock.com/ruby/Module/alias_method – fmendez
_system_, _backtick_, _fork/exec_ 등을 사용 중지해야합니다. –