2009-05-11 4 views
3

Ruby 프로그램에서 라이브러리를 게으른로드하려고합니다 (호기심에 대해 crack).`autoload`는 에러를 발생 시키지만`require`는 않습니다 (ruby)

내가 이렇게 할 경우 :

require 'rubygems' 
require 'crack' 

모든 것이 잘 작동한다. 그러나 이것을 시도 할 때 :

require 'rubygems' 
autoload :Crack, 'crack' 

LoadError가 발생합니다. (로드 할 파일이 없습니다. 균열)

왜이 오류가 발생합니까? '균열'(및 다른 사용자가 설치 한 보석)이 내 $ LOAD_PATH에 없기 때문입니까?

편집 :

또한, autoload는 표준 라이브러리와 함께 작동 않습니다

autoload :Yaml, 'yaml' 

잘 작동 및 오류를 제기하지 않는다.

답변

5

당신은 수행하여 $의 LOAD_PATH에 '균열'보석을 추가해야합니다은 : 젬은 커널 # 전에 보석을 "활성화"를 시도하는 방법으로 필요로 바꾸기 때문에

gem 'crack' 

이 필요하다 필요한 경우 필요하지만 Kernel # load -와 autoload calls는 백엔드에서 동일한 작업을 수행하지 않습니다.

+0

우수! Kernel # require도 설명해 주셔서 감사합니다! 'require 'rubygems'' 전후에 이걸 넣어야합니까, 아니면 중요합니까? –

+0

이후 : "gem"메소드가 rubygems에 의해 Kernel에 추가되므로 rubygems가 필요할 때까지 사용할 수 없습니다. –