Programing

하나의 클래스 메서드에 별칭을 지정하는 더 간단한 (한 줄) 구문이 있습니까?

lottogame 2021. 1. 8. 07:47
반응형

하나의 클래스 메서드에 별칭을 지정하는 더 간단한 (한 줄) 구문이 있습니까?


다음을 수행 할 수 있다는 것을 알고 있으며 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

반응형