programing

루비에서 __FILE_은 무엇을 의미합니까?

topblog 2023. 6. 2. 20:03
반응형

루비에서 __FILE_은 무엇을 의미합니까?

Ruby에서 항상 볼 수 있는 내용입니다.

require File.dirname(__FILE__) + "/../../config/environment"  

무엇인가.__FILE__비열한?

현재 파일 이름에 대한 참조입니다.파일에서foo.rb,__FILE__라고 해석될 것입니다."foo.rb".

편집: Ruby 1.9.2와 1.9.3은 Luke Bayes가 그의 논평에서 말한 것과 조금 다르게 행동하는 것으로 보입니다.다음 파일 사용:

# test.rb
puts __FILE__
require './dir2/test.rb'
# dir2/test.rb
puts __FILE__

입니다.ruby test.rbwill 출력

test.rb
/full/path/to/dir2/test.rb

의 가치__FILE__파일이 로드될 때 생성 및 저장되지만 업데이트되지 않는 상대 경로입니다.이것은 만약 당신이 어떤 전화를 가지고 있다면.Dir.chdir응용 프로그램의 다른 위치에서 이 경로가 잘못 확장됩니다.

puts __FILE__
Dir.chdir '../../'
puts __FILE__

이 문제에 대한 한 가지 해결 방법은 확장된 가치를 저장하는 것입니다.__FILE__응용 프로그램 코드 외부에 있습니다.당신이 하는 한require진술은 당신의 정의의 맨 위에 있습니다 (또는 적어도 어떤 호출 전에).Dir.chdir), 이 값은 디렉터리를 변경한 후에도 계속 사용됩니다.

$MY_FILE_PATH = File.expand_path(File.dirname(__FILE__))

# open class and do some stuff that changes directory

puts $MY_FILE_PATH

__FILE__는 실행 중인 코드가 포함된 파일의 확장자를 가진 파일 이름입니다.

foo.rb,__FILE__"foo.dll"이 됩니다.

한다면foo.rbdir에 있었습니다./home/josh그리고나서File.dirname(__FILE__)돌아올 것입니다/home/josh.

어쨌든, 윈도우 버전인 루비에서, 나는 방금 확인했고 그리고.__FILE__파일의 전체 경로를 포함하지 않습니다.대신 파일이 실행되는 위치와 관련된 파일의 경로를 포함합니다.

PHP에서__FILE__전체 경로입니다. (제 생각에는 이 경로가 더 바람직합니다.이러한 이유로 Ruby에서 경로를 이식할 수 있도록 하려면 다음을 사용해야 합니다.

File.expand_path(File.dirname(__FILE__) + "relative/path/to/file")

루비 1.9.1에서는__FILE__에는 파일의 전체 경로가 포함되어 있습니다. 위의 설명은 Ruby 1.8.7을 사용할 때 사용한 것입니다.

Ruby 1.8.7과 1.9.1(1.9에 대한 확신 없음) 모두와 호환되기 위해서는 위에서 보여준 구성을 사용하여 파일이 필요합니다.

언급URL : https://stackoverflow.com/questions/224379/what-does-file-mean-in-ruby

반응형