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

Ruby의 Zeitwerk 및 모듈 자동 로드(명확하게 설명됨)

이 문서에서는 Ruby의 클래스 및 모듈 자동 로딩에 대해 설명합니다. Rails 6의 일부인 새로운 "Zeitwerk" 보석을 포함합니다.

질문부터 시작하겠습니다...

여러 소스 코드 파일을 하나로 모으려면 어떻게 해야 합니까?

require 그들.

파일을 요구하면 Ruby가 파일을 읽고 내부 코드를 실행합니다. 하지만 필수 파일 목록이 있는 경우 모든 파일을 로드할 필요가 없습니다. .

적어도 당장은 아니지만…

필요할 때만 파일을 로드하는 방법 애플리케이션을 더 빨리 시작할 수 있도록 하시겠습니까?

바로 자동 로딩이 시작됩니다!

자동 로딩 사용 방법

Ruby에는 자동 로딩 기능이 내장되어 있습니다.

상수를 기반으로 합니다.

Coconut과 같은 상수일 때 가 처음 발견되면 Ruby는 관련 파일을 로드하려고 시도합니다.

하지만 먼저 :

이 상수를 파일 이름으로 등록해야 합니다.

좋아요 :

autoload :Coconut, "lib/coconut.rb"

이제 Ruby는 Coconut을 사용하고 싶을 때 어디를 봐야 하는지 알고 있습니다. 클래스 또는 모듈.

하지만 더 나은 것이 무엇인지 아십니까?

상수를 수동으로 등록할 필요가 없고 Ruby가 모든 항목을 찾을 위치를 정확히 알고 있다고 상상해 보세요.

음...

이것이 Rails가 하는 일이지만 Rails 6에서는 이 autoload를 사용하지 않았습니다. 메커니즘.

Rails 6 이전의 Rails에서 자동 로드

어떻게 작동하는지 완전히 이해하지 못하지만 Rails는 const_missing을 사용합니다. , autoload 대신 자동으로 파일을 찾아 프로젝트에 로드합니다.

왜 유용한가요?

require를 사용할 필요가 없기 때문입니다. Rails 프로젝트에서.

구성보다 관례…

규칙을 따르면 모든 것이 자동으로 이루어집니다.

규칙은 :

  1. 파일을 찾을 수 있는 위치에 둡니다(ActiveSupport::Dependencies.autoload_paths에 정의된 대로). )
  2. 파일당 하나의 클래스/모듈 정의
  3. 밑줄을 사용하여 클래스 이름 뒤에 파일 이름을 지정합니다(UsersController => users_controller )

그럼...

코드가 이러한 클래스 이름을 참조할 때마다 Rails는 해당 클래스 이름을 찾을 수 있는 위치를 알게 됩니다.

매우 유용합니다.

Rails 6 이후 Rails에서 자동 로드

Rails 6에는 새로운 지속적인 자동 로딩 메커니즘이 도입되었습니다.

Zeitwerk라고 합니다.

"클래식" Rails 자동 로드와 어떻게 다릅니까?

const_missing과 달리 모듈 중첩과 같은 정보가 부족한 이전 Rails 버전에서 사용하는 접근 방식으로 인해 여러 가지 제한 사항이 발생합니다.

Zeitwerk는 Ruby의 autoload를 사용합니다. .

이 새로운 구현은 유사한 파일 명명 규칙을 따릅니다.

사실 :

Zeitwerk는 파일 이름을 사용하여 users_controller 클래스 이름을 추론합니다. => UsersController .

이전과 정확히 반대입니다.

Btw, 여전히 autoload_paths를 사용할 수 있습니다. 하지만 "/lib"와 같은 BASE 경로만 추가하려고 합니다. , "/lib/**" 대신 .

왜?

이것이 네임스페이스 및 중첩과 함께 작동하는 방식입니다.

  • "lib"가 있는 경우 자동 로드에서 "Fruit::Orange"를 정의하려는 경우 , 파일 이름은 "lib/fruit/orange.rb"여야 합니다. .
  • 하지만 "lib/fruit"가 있는 경우 자동 로드에서 다른 폴더를 사용해야 하므로 파일 이름은 "lib/fruit/fruit/orange.rb"가 됩니다. 같은 수업을 위해.

가장 좋은 점은?

이 새로운 기능은 Rails에 붙어 있지 않으므로 비 Rails 프로젝트에서 사용할 수 있습니다!

요약

Ruby의 모듈 자동 로딩, 정확히 무엇이며 어떻게 작동하는지 배웠습니다!

이 새로운 이해를 통해 가장 효과적인 방법으로 Ruby 프로젝트를 구성할 수 있습니다.

당신의 차례입니다. 편집기를 열고 즐거운 시간을 보내세요.

읽어 주셔서 감사합니다! 🙂