2014-10-08 3 views
0

저는 보석을 구현 중입니다. 일부 맞춤 메소드를 String 클래스에 추가하려고합니다. 그래서 'lib'디렉토리 하위 디렉토리 'core_ext'를 만들고 'string.rb'파일을 배치했습니다. 파일의ruby에서 'string.rb'파일을 필요로하지 않는 이유는 무엇입니까?

require 'core_ext/string.rb' 

있지만 String 클래스에 영향을 미치지 않습니다,

내가 변경하는 경우 : 내 주요 파일에서

class String 
    def custom_method 
    some_action 
    end 
end 

내가 만든 :

string.rb는 포함 이름을 'my_string.rb'와 같은 다른 이름으로 변경하고 require와 행을 변경하면 모든 것이 올바르게 작동합니다. 왜 'string.rb'를 파일 이름으로 사용할 수 없습니까?

+0

코드가 작동하려면'string.rb'을 요구하지 않아도됩니다. Requiring은 Ruby에게 그 클래스를로드하도록 지시하고, String 클래스는 이미로드되어있다. 코드가 제대로 작동해야합니다. 방금 테스트했는데 정상적으로 작동했습니다. "일하지 않는다"는 것이 더 구체적 일 수 있습니까? – Max

+0

[ruby가 필요하지 않음] 가능한 복제본 (http://stackoverflow.com/questions/11600170/ruby-require-not-working) ('require_relative'시도) –

답변

1

다른 곳에서 이미로드 된 core_ext/string이라는 파일이로드되어 있으면이 파일도로드 된 것으로 간주됩니다. 다른 이름을 제시해야 할 수도 있습니다.

p11y가 지적한 Ruby 1.9의 기능이 훨씬 더 나은 해결책입니다.

+0

네가 옳았다. 나는 'base_gem'및 현재 보석을 가지고 있으며, 현재 보석은 'base_gem'을 사용하고 있습니다. 기본 보석도 'core_ext/string.rb'을 가지고 있고 그것을 필요로하지만 이상한 것은 그것이 평등 한 길이라고 생각할 필요가 있습니다. 그런 식으로 생각하는 이유를 아십니까? – dolgishev

+0

@dolgishev 시도'로드 'core_ext/string.rb''. 'load'는 똑똑하지 않고 행복하게 파일을 두 번로드합니다. – steenslag

+0

@steenslag'load'를 사용하는 것은 정말로 무거운 방법이며 아마도 나쁜 생각 일 것입니다. – tadman

관련 문제