Computer >> 컴퓨터 >  >> 프로그램 작성 >> Ruby

Ruby 별칭 키워드를 사용하는 방법

다음 두 가지 방법으로 Ruby 메서드에 대체 이름을 지정할 수 있습니다.

  • 별칭(키워드)
  • 별칭_메서드

그들은 약간 다른 방식으로 같은 일을 하기 때문에 이것은 혼란스러운 주제가 될 수 있습니다.

이 이미지는 차이점을 요약한 것입니다. :

Ruby 별칭 키워드를 사용하는 방법

확실한 이해를 위해 이러한 차이점을 더 자세히 살펴보겠습니다!

별칭 키워드

먼저 alias가 있습니다. , Ruby 키워드(예:if , def , class 등)

이렇게 생겼어요 :

alias print_something puts

print_something 1

이제 print_something 호출 puts를 호출하는 것과 같습니다. .

alias 몇 가지 흥미로운 속성이 있는 키워드입니다. :

  • 특수 구문이 있습니다
  • 코드 어디에서나 사용할 수 있습니다.
  • 전역 변수의 별칭을 지정할 수 있습니다(이 작업을 수행하지 마세요!)

유효한 형식의 별칭은 :

  • 별칭 b
  • 별칭 :a :b
  • 별칭:"#{}" :b

인수 사이에는 쉼표가 없습니다. 일반적인 방법처럼.

Ruby는 a를 모두 기대합니다. &b 유효한 메서드 이름이 되려면 변수가 여기에서 작동하지 않습니다. 변수를 사용하려면 다음과 같이 해야 합니다...

:

a = :print_something
b = :puts

alias :"#{a}" :"#{b}"

그러나 이것은 보기 흉하므로 alias_method를 사용하는 것이 좋습니다. 동적 메서드 이름의 경우.

alias_method 메소드

다음:

alias_method가 있습니다. , Module에 정의된 메소드 .

이 메서드는 클래스 및 모듈 수준에서만 사용할 수 있으며 인스턴스 메서드 내부에서는 사용할 수 없습니다.

문서의 설명입니다. :

<블록 인용>

alias_method:"new_name을(를) 만듭니다. old_name 메서드의 새 복사본 . 재정의된 메서드에 대한 액세스를 유지하는 데 사용할 수 있습니다."

:

class Foo
  alias_method :print_something, :puts
end

이렇게 하면 print_something의 별칭이 지정됩니다. puts Foo 내부 .

문자열을 alias_method로 사용할 수 있습니다. 인수.

:

class Foo
  alias_method "print_something", "puts"
end

별칭 대 alias_method

alias에 대한 개요를 보았습니다. &alias_method .

그러나 차이점은 언제 작용합니까?

  1. 동적으로 생성된 메서드 이름에 대한 별칭을 정의하는 경우 (예:"abc#{rand}")
  2. 메소드 내부에 별칭을 정의하는 경우

alias를 사용하여 동적으로 생성된 메서드 이름에 대한 별칭을 정의할 수 있습니다. 키워드이지만 보간된 기호를 사용해야 합니다.

alias_method 사용 더 유연한 주장을 할 수 있습니다.

:

class Cat
  def speak
    "meow"
  end

  alias_method "#{name.downcase}_speak", :speak
end

p Cat.new.cat_speak
# "meow"

지금 :

메서드 내에서 별칭을 정의하려는 경우 다음 오류가 발생합니다.

undefined method 'alias_method' for # (NoMethodError)

클래스가 아닌 개체 내에서 작업하고 있기 때문입니다!

인스턴스 메소드 내에서는 Module에 정의된 메소드에 액세스할 수 없습니다. , 여기서 alias_method 정의됩니다.

가능한 한 가지 해결책 :

def enable_aliased_methods
  self.class.send(:alias_method, :x, :testing)
end

alias 사용 :

def enable_aliased_methods
  alias :x :testing
end

한 가지 중요한 차이점:

  • alias로 정의된 메소드 alias가 있는 클래스에 속합니다. 사용됨
  • alias_method에 의해 정의된 메소드 self에 속합니다. , 코드가 실행될 때의 현재 클래스

이것이 중요한 이유입니다.

alias를 사용하는 상위 클래스의 메소드를 호출하는 경우 키워드...

앨리어싱은 메서드를 호출하는 클래스가 아니라 부모 클래스에서 발생합니다.

:

class Food
  def create_alias
    alias print_on_screen puts
  end
end

class Apple < Food
end

Apple.new.create_alias

그러나 alias_method를 사용하는 경우 메서드는 Apple에서만 별칭이 지정됩니다. .

앨리어싱은 메서드의 복사본을 만듭니다.

alias_method의 설명에 따라 &alias (keyword) , Ruby는 메서드의 복사본을 만듭니다.

단순히 새로운 이름이 아닙니다.

그러나 방법의 실제 사본 .

이것은 몇 가지 실용적인 의미가 있습니다.

def bacon
  123
end

alias :x :bacon

x
# 123

bacon
# 123

그래서 우리는 별칭 x bacon , 이제 bacon을 재정의하면 어떻게 되는지 지켜보세요. :

def bacon
  234
end

x
# 123

bacon
# 234

x 방법은 동일하지만 bacon 새 값을 반환합니다!

메서드에 앨리어싱을 적용한 후 클래스에 모듈을 포함하는 경우 이는 놀라운 일이 될 수 있습니다.

동영상 튜토리얼

요약

일반적으로 나는 alias_method를 더 좋아합니다. 실제 방법이기 때문입니다.

alias 키워드에는 기억하고 유념해야 하는 몇 가지 특별한 속성이 있습니다.

새로운 것을 배웠습니까?

이 기사를 Ruby 친구들과 공유하여 그들도 배울 수 있도록 하세요!