반응형
하나의 클래스 메서드에 별칭을 지정하는 더 간단한 (한 줄) 구문이 있습니까?
다음을 수행 할 수 있다는 것을 알고 있으며 3 줄만 있습니다.
class << self
alias :generate :new
end
그러나 호기심에서 다음과 같은 더 간단한 방법 (세미콜론 제외)이 있습니까?
class_alias :generate, :new
Ruby 1.9부터이 singleton_class
메서드를 사용하여 클래스의 싱글 톤 객체에 액세스 할 수 있습니다 . 이렇게하면 alias_method
메서드에 액세스 할 수도 있습니다 . 메서드 자체는 비공개이므로 send
. 하나의 라이너가 있습니다.
singleton_class.send(:alias_method, :generate, :new)
하지만 alias
여기서는 작동하지 않습니다.
별칭 메서드 예제를 붙여넣고 있습니다.
class Test
def simple_method
puts "I am inside 'simple_method' method"
end
def parameter_instance_method(param1)
puts param1
end
def self.class_simple_method
puts "I am inside 'class_simple_method'"
end
def self.parameter_class_method(arg)
puts arg
end
alias_method :simple_method_new, :simple_method
alias_method :parameter_instance_method_new, :parameter_instance_method
singleton_class.send(:alias_method, :class_simple_method_new, :class_simple_method)
singleton_class.send(:alias_method, :parameter_class_method_new, :parameter_class_method)
end
Test.new.simple_method_new
Test.new.parameter_instance_method_new("I am parameter_instance_method")
Test.class_simple_method_new
Test.parameter_class_method_new(" I am parameter_class_method")
산출
I am inside 'simple_method' method
I am parameter_instance_method
I am inside 'class_simple_method'
I am parameter_class_method
.NET의 클래스 별 버전이 있다고 생각하지 않습니다 alias
. 나는 보통 당신이 이전에 보여준 것처럼 그것을 사용합니다.
However you may want to investigate the difference between alias
and alias_method
. This is one of those tricky areas of ruby that can be a bit counter-intuitive. In particular the behavior of alias
with regard to descendants is probably not what you expect.
Hope this helps!
ReferenceURL : https://stackoverflow.com/questions/15130998/is-there-simpler-one-line-syntax-to-alias-one-class-method
반응형
'Programing' 카테고리의 다른 글
위와 아래에 알 수없는 높이 div가있는 CSS를 사용하여 div를 나머지 높이로 설정 (0) | 2021.01.08 |
---|---|
Crypto ++를 사용하는 AES의 예 (0) | 2021.01.08 |
리소스로드 실패 : 서버가 404 (찾을 수 없음) 상태로 응답했습니다. (0) | 2021.01.08 |
AngularJS $ http 성공 / 오류 메서드가 더 이상 사용되지 않는 이유는 무엇입니까? (0) | 2021.01.08 |
C ++에서 operator ==를 양방향으로 오버로드해야합니까? (0) | 2021.01.08 |