programing

루비에서 require_relative와 require의 차이점은 무엇입니까?

elecom 2023. 6. 17. 08:17
반응형

루비에서 require_relative와 require의 차이점은 무엇입니까?

사이의 차이점은 무엇입니까?require_relative그리고.require루비에?

문서를 보십시오.

require_relative 방법인 기본 를 보완합니다.require파일을 포함하는 파일에 상대적인 파일을 로드할 수 있도록 함으로써require_relative진술.

예를 들어 "test" 디렉터리에 장치 테스트 클래스가 있고 테스트 "test/data" 디렉터리에 해당 데이터가 있는 경우 테스트 사례에서 다음과 같은 행을 사용할 수 있습니다.

require_relative "data/customer_data_1"

require_relative는 의편한부집다니의 집합입니다.require

require_relative('path')

동일:

require(File.expand_path('path', File.dirname(__FILE__)))

한다면__FILE__정의되거나 증가합니다.LoadError그렇지않으면.

이는 다음을 의미합니다.

  • require_relative 'a'그리고.require_relative './a'현재 파일과 관련된 요구사항(__FILE__).

    결과가 발신자의 현재 디렉토리에 따라 달라지지 않도록 하기 위해 라이브러리 내에서 요청할 때 사용할 항목입니다.

  • eval('require_relative("a.rb")')을 기르다, 키우다, 키우다, 키우다, 키우다LoadError__FILE__는 내정않지음 내부에 되어 있지 .eval.

    이것이 당신이 사용할 수 없는 이유입니다.require_relative에서 RSpec 테에서, 그은것트를 얻습니다.eval편집의

다음 작업은 다음과 같은 경우에만 가능합니다.require:

  • require './a.rb'현재 디렉터리와 관련된 요구 사항

  • require 'a.rb'경로를 합니다(으(으)로 표시됩니다.$LOAD_PATH을(를) 요구합니다. 경로와 .현재 디렉터리 또는 경로와 관련된 파일을 찾지 못합니다.

    이 작업은 에서 수행할 수 없습니다.require_relative은 " "파일명이 절대 경로로 해결되지 않는다"로 하는 경우 검색이 입니다./또는./또는../), )의File.expand_path.

다음 작업은 두 가지 모두에서 가능하지만 사용할 수 있습니다.require이기 때문에: 짧고더효기때문에이적더율:때문:

  • require '/a.rb'그리고.require_relative '/a.rb'둘 다 절대 경로를 필요로 합니다.

소스를 읽는 중

문서가 명확하지 않을 때는 소스(문서의 소스를 토글)를 검토하는 것이 좋습니다.어떤 경우에는 무슨 일이 일어나고 있는지 이해하는 데 도움이 됩니다.

요구 사항:

VALUE rb_f_require(VALUE obj, VALUE fname) {
  return rb_require_safe(fname, rb_safe_level());
}

require_message:

VALUE rb_f_require_relative(VALUE obj, VALUE fname) {
    VALUE base = rb_current_realfilepath();
    if (NIL_P(base)) {
        rb_loaderror("cannot infer basepath");
    }
    base = rb_file_dirname(base);
    return rb_require_safe(rb_file_absolute_path(fname, base), rb_safe_level());
}

이를 통해 다음과 같은 결론을 내릴 수 있습니다.

require_relative('path')

다음과 같습니다.

require(File.expand_path('path', File.dirname(__FILE__)))

이유:

rb_file_absolute_path   =~ File.expand_path
rb_file_dirname1        =~ File.dirname
rb_current_realfilepath =~ __FILE__

요약

사용하다require된 gems의

사용하다require_relative

require를 사용하여 파일을 찾습니다.
require_relative 위치를 합니다.


요구하다

Require는 사용자가 설치했는지 여부에 따라 달라집니다(예:gem install [package]에 저장합니다 해당 기능에 대한 패키지를 시스템 어딘가에 저장합니다.

을 할 때require"를 사용할 수 있습니다../디렉터리에 " 현디터리있파예일형식의는에렉")require "./my_file"은 그나그것일권나장관는되아당합사니다신용야해은니며행이러거반은이적▁and합다▁use니▁but▁should▁you사야▁is▁thatended▁practice▁or를 사용해야 합니다.require_relative대신.

require_message

즉, 'require_relative 문이 있는 파일 위치에 대한 상대적' 파일을 포함하는 것입니다.일반적으로 파일은 "up"이 아닌 "in the current directory tree"에 있어야 합니다. 를 들어 사용

require_relative '../../../filename'

불필요하고 취약한 종속성을 생성하는 경향이 있기 때문에 파일 시스템 내에서 (디렉토리 레벨 3개까지).그러나 디렉토리 트리 내에 이미 '깊이' 있는 경우 다른 디렉토리 트리 분기를 "위로 및 아래로" 이동해야 할 수도 있습니다.좀 더 간단하게 말하자면, 이 저장소 외부의 파일에는 require_relative를 사용하지 마십시오(2018년 말 현재 대부분 사실상 표준인 git을 사용하고 있다고 가정할 때).

:require_relative파일의 현재 디렉터리를 require_dll 문과 함께 사용합니다(따라서 명령어를 사용하는 현재 디렉터리는 필요 없음).이것은 계속 유지됩니다.require_relative경로는 항상 동일한 방식으로 필요한 파일에 상대적이기 때문에 "비활성화"됩니다.

Ruby API에서:

require_method는 require_method 문이 포함된 파일에 상대적인 파일을 로드할 수 있도록 함으로써 필요한 내장 메서드를 보완합니다.

파일을 로드하기 위해 필요를 사용하는 경우 일반적으로 시스템에 올바르게 설치되어 액세스할 수 있게 된 기능에 액세스하게 됩니다.require는 프로젝트 코드 내에서 파일을 로드하는 데 적합한 솔루션을 제공하지 않습니다.이 기능은 개발 단계에서 테스트 데이터에 액세스하거나 프로젝트 내에서 외부에서 사용할 목적이 아닌 "잠긴" 파일에 액세스하는 경우에도 유용할 수 있습니다.

예를 들어 "test" 디렉터리에 장치 테스트 클래스가 있고 테스트 "test/data" 디렉터리에 해당 데이터가 있는 경우 테스트 사례에서 다음과 같은 행을 사용할 수 있습니다.

require_relative "data/customer_data_1" 

"테스트"나 "테스트/데이터"가 Ruby의 라이브러리 경로에 없을 가능성이 높기 때문에(그리고 그럴 만한 이유가 있기 때문에) 일반적인 요구 사항으로는 찾을 수 없습니다.require_message는 이 특정 문제에 대한 좋은 해결책입니다.

로드할 파일의 확장자(.rb 또는 .so)를 포함하거나 생략할 수 있습니다.

경로가 _str에 응답해야 합니다.

설명서는 http://extensions.rubyforge.org/rdoc/classes/Kernel.html 에서 찾을 수 있습니다.

정답은 맞지만 기술적인 부분이 많습니다.Ruby보다 최신 버전인 경우:

  • require_relative작성한 다른 파일에서 코드를 가져오는 데 사용될 가능성이 높습니다.

예를 들어, 데이터가 있는 경우~/my-project/data.rb그리고 당신은 그것을 포함하기를 원합니다.~/my-project/solution.rbsolution.rb당신은 덧붙일 것입니다.require_relative 'data'.

이러한 파일은 동일한 디렉토리에 있을 필요가 없습니다. require_relative '../../folder1/folder2/data'또한 유효합니다.

  • require다른 사람이 쓴 라이브러리에서 코드를 가져오는 데 사용될 가능성이 높습니다.

예를 들어, 에서 제공되는 도우미 기능 중 하나를 사용하려면 어떻게 해야 합니까?active_support도서관?보석을 설치해야 합니다.gem install activesupport 파일에 .require 'active_support'.

require 'active_support/all'
"FooBar".underscore

다르게 말하면,

  • require_relative호출하는 파일과 관련하여 특별히 지정된 파일이 필요합니다.

  • require되어 있어야 합니다.$LOAD_PATH.

방금 RSpec 코드에 다음과 같은 내용이 있습니다.require_relative이고 O(1) 상수고이인requireO(N) 선형입니다.그래서 아마 다른 점은require_relative는 다선호것는다니입되보다 선호되는 입니다.require.

할 때 윈도우를 할 수 .require './1.rb' UNC에서 됩니다.\\servername\sharename\folder해야 할 는 다음과 .require_relative './1.rb'.

저는 다른 이유로 어떤 것을 사용해야 할지 논의에 참여하지 않습니다.

절대 경로

require './app/example_file.rb'

약칭

require_relative 'example_file'

언급URL : https://stackoverflow.com/questions/3672586/what-is-the-difference-between-require-relative-and-require-in-ruby

반응형