Pharo 5.0을 사용하고 있습니다. 몇 가지 사례에서 기존 Pharo 클래스 (예 : , 예 :, DBXTalk/Garage 또는 Regex-Core의 무언가)에서 제한 또는 가능한 버그를 발견했습니다. 나는 자신의 프로젝트 밖에서 클래스에 존재하는 셀렉터 또는 셀렉터 세트를 수정하여 패키지의 일부로 만들 수 있기를 원합니다.다른 패키지의 클래스에서 기존 선택기를 재정의하는 방법
나는 외부 클래스의 새로운 선택기를 만들고 (이 tutorial 같이 예를 들어,) 내 패키지에 저를 이동하는 방법에 대한 몇 가지 지침을 발견했다. 아주 멋지다. 그러나 어떤 경우에는 실제로 외부 클래스의 기존 선택기를 수정하고 해당 셀렉터를 사용하면 외부 클래스의 셀렉터보다 우선합니다. 기존 타사 또는 Pharo 사전 제공 패키지를 수정하고 싶지 않습니다.
GNU 스몰 토크에서 나는 클래스 확장을하는 정상적인 부분처럼 그렇게 할 수 있습니다. 예 :
Kernel.MatchingRegexResults extend [
at: anIndex [
"My updated version of the 'official' Kernel.MatchingRegexResults#at: selector"
"This is part of my package so overrides the 'official' version"
...
]
foo [
"My new foo selector"
]
]
Pharo 5.0에서 어떻게해야합니까? 나는 꽤 많은 검색을 해왔지만 그것을 할 수있는 방법을 찾지 못했습니다. "확장"또는 "재정의"라는 단어는 예를 들어 및 으로 삽입하면 Pharo 도서로 Pharo에 표시되지 않습니다.
* Move to package ... * 명령을 시도 했습니까? 선택기 목록의 오른쪽 클릭 메뉴에서 사용할 수 있습니다. –
@LeandroCaniglia 예 했어요. 사실, 나는 내 질문에 그것을 언급했다. 기존 외부 클래스에 대한 새 선택기를 만들어 내 새 선택기를 내 패키지로 옮기려는 경우이 작업이 효과적입니다. 그러나 그것은 기존 셀렉터의 구현을 내 패키지로 옮겨 외부 패키지에서 제거하기 때문에 기존 셀렉터를 수정/재정의하는 데는 효과가 없습니다. 재정의 된 selector를 외부 패키지에서 제거하고 싶지 않고 재정의하려고합니다. – lurker
재정의 (override)는 재정의 (override)를 의미합니다 ... 메소드를 다시 작성하면 패키지로 옮겨 지지만 모든 시스템에 대해 변경됩니다. Pharo에는 모듈 시스템이 없으므로 동일한 클래스에서 동일한 이름을 가진 다른 메소드를 가질 수 없습니다. – EstebanLM