문제

이 두 가지 방법이 단순히 동의어라면 왜 사람들이 추가 캐릭터를 작성하는 데 어려움을 겪습니까? "_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 메소드 호출 차단을 수행하는 최악의 방법입니다. 비슷한 기술을 찾고 있다면 레일 외부에서 사용하지 마십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top