alias_method_chain은 alias_method와 동의어입니까?
-
06-07-2019 - |
문제
이 두 가지 방법이 단순히 동의어라면 왜 사람들이 추가 캐릭터를 작성하는 데 어려움을 겪습니까? "_chain
"?
해결책
아니. alias_method
루비의 표준 방법입니다. alias_method_chain
기존 메소드를 새 이름으로 별명하는 일반적인 동작을 단순화 한 다음 새 메소드를 원래 이름으로 별칭하는 레일 애드온입니다. 예를 들어 새 버전의 method
새로운 기능이있는 메소드 new_feature
, 다음 두 코드 예제는 다음과 같습니다.
alias_method :method_without_new_feature, :method
alias_method :method, :method_with_new_feature
그리고
alias_method_chain :method, :new_feature
편집하다
다음은 가상의 예입니다. 방법이있는 사람 수업이 있다고 가정합니다. rename
. "John Doe"와 같은 문자열을 가져 가고 공간에서 분리하고 First_name 및 Last_name에 부품을 할당하는 것입니다. 예를 들어:
person.rename("Steve Jones")
person.first_name #=> Steve
person.last_name #=> Jones
이제 우리는 문제가 있습니다. 우리는 자본화되지 않은 새로운 이름을 계속 얻습니다. 그래서 우리는 새로운 방법을 쓸 수 있습니다 rename_with_capitalization
그리고 사용 alias_method_chain
이것을 해결하려면 :
class Person
def rename_with_capitalization(name)
rename_without_capitalization(name)
self.first_name[0,1] = self.first_name[0,1].upcase
self.last_name[0,1] = self.last_name[0,1].upcase
end
alias_method_chain :rename, :capitalization
end
이제, 노인 rename
호출됩니다 rename_without_capitalization
, 그리고 rename_with_capitalization
~이다 rename
. 예를 들어:
person.rename("bob smith")
person.first_name #=> Bob
person.last_name #=> Smith
person.rename_without_capitalization("tom johnson")
person.first_name #=> tom
person.last_name #=> johnson
다른 팁
alias_method_chain
메소드 호출 차단을 수행하는 최악의 방법입니다. 비슷한 기술을 찾고 있다면 레일 외부에서 사용하지 마십시오.
제휴하지 않습니다 StackOverflow