미래 지향적인 웹 앱 구축: The Codest의 전문가 팀이 제공하는 인사이트
The Codest가 최첨단 기술로 확장 가능한 대화형 웹 애플리케이션을 제작하고 모든 플랫폼에서 원활한 사용자 경험을 제공하는 데 탁월한 성능을 발휘하는 방법을 알아보세요. Adobe의 전문성이 어떻게 디지털 혁신과 비즈니스를 촉진하는지 알아보세요...
루비의 가장 사랑받는 기능 중 하나는 매우 유연한 구문입니다. 개인적으로 저는 클래스와 그 속성을 정의할 수 있는 수많은 가능성 때문에 루비를 좋아하는데, 이 글에서 이 부분에 대해 설명할 것입니다.
하나의 공용 메서드와 하나의 비공개 메서드가 있는 Foo 클래스를 사용한다고 가정해 보겠습니다:
클래스 Foo
def bar
:awesome
end
private
def baz
:something_private
end
end
모든 것이 훌륭합니다. 거의 모든 솔루션에서 이러한 솔루션을 볼 수 있습니다. 프로젝트. 실행 중 Foo.new.baz
를 사용하면 오류가 발생합니다. NoMethodError(#에 대해 호출된 비공개 메서드 'baz') 로 저장할 수 있습니다. 저장 형식을 변경하고 클래스 정의에 접두사로 private을 추가하려고 하면 어떻게 될까요?
클래스 Foo
def bar
:awesome
end
private def baz
:something_private
end
end
실행 후 보시다시피 코드실제로 작동합니다! 메서드를 수행하기 전에 메서드의 가시성을 입력할 수 있는 이유는 무엇인가요? 메서드를 정의할 때 def는 메서드의 이름을 심볼로 반환하기 때문입니다. 이 표현식은 구문의 일부일 뿐만 아니라 사실상 Module 클래스에서 파생된 메서드이며 이 심볼을 인수로 취급합니다. 자세한 내용은 다음 문서를 참조하세요. 이 링크에서. 비공개로 쉽게 시작했으니 비공개 방법의 가시성을 변경해 보겠습니다.
클래스 Foo
def bar
:awesome
end
private def baz
:something_private
end
public :baz
end
irb(main):012:0> Foo.new.baz
=> :something_private
성공! 베이스 방법을 두 번 공개했기 때문에 공개되었습니다. 물론 모듈에도 동일한 작업이 적용됩니다.
잘됐네요, 하지만 어디로 갈 수 있을까요?
이 기능은 메서드를 정의하는 동안 메서드의 표시 여부를 자유롭게 변경하거나 메서드를 상속할 때 표시 여부를 변경할 수 있기 때문에 많은 이점을 제공합니다.
이제 별칭과 접근자의 가시성을 변경하는 측면에서 Ruby 2.7이 어떤 기능을 제공하는지 살펴보겠습니다.
클래스 Foo
private attr_accessor :awesome_variable
end
안타깝게도 비공개 메서드에서 심볼과 attr_accessor를 기대하기 때문에 오류가 발생합니다. 코드가 nil을 반환하므로 이 메서드는 Ruby 2.7의 비공개 사용과 호환되지 않습니다. 그렇다면 옵션은 무엇일까요?
awesome_변수awesome_변수
메서드를 사용합니다.클래스 Foo
private
attr_accessor :awesome_variable
end
attr_attribute
이 경우 세터를 입력하는 것도 잊지 말아야 합니다.클래스 Foo
ATTR_ACCESSOR :awesome_변수
private :awesome_variable, :awesome_variable=.
end
문제 attr_ *
메서드만이 장애물은 아닙니다. 비공개 별칭을 만들 때도 같은 어려움을 겪을 수 있습니다.
클래스 Foo
개인 별칭 :bar, :awesome_bar
end
다행히 루비 3.0에서는 가시성 메서드가 배열을 인수로 사용할 수 있고 메서드 별칭인 attr_ *가 정의된 메서드의 이름으로 배열을 재설정할 수 있게 되어 큰 변화가 도입되었습니다. 자세히 읽어보세요. 여기.
이제 최신 euba의 몇 가지 예를 살펴보고 실제로 변경 사항이 적용되었는지, 그리고 어떻게 사용할 수 있는지 확인해 보겠습니다.
첫 번째 예제에서는 attr 접근자 앞에 private을 사용하겠습니다:
클래스 Foo
private attr_accessor :awesome_variable
end
이러한 호출은 구문 구문 분석에 오류를 일으키지 않으며, 중요한 것은 awesome_variable
그리고awesome_변수 =
메서드는 비공개가 됩니다.
별칭 메서드는 지금과 마찬가지로 새 메서드의 이름으로 기호를 반환하고 표시합니다.
클래스 Foo
개인 별칭 :bar, :awesome_bar
end
흥미로운 사실은 더 많은 방법을 탐구할 수도 있다는 것입니다.인쇄 모듈은 개인과 ATTR 사이에서 호출할 수 있습니다.메서드는 표현식의 오른쪽에 있는 메서드의 이름이 포함된 배열을 반환하는 것이 중요합니다.
모듈 클래스
def awesome_print(names)
이름을 넣습니다
names
end
end
클래스 Foo
private awesome_print attr_reader :awesome_bar
end
이 글이 도움이 되셨기를 바랍니다! 루비 3.0에 대한 더 많은 소식이 있다면 더 읽어보세요. 여기.
행복한 코딩!
자세히 읽어보세요: