উত্তর:
এটি বর্তমান ফাইলের নামের একটি রেফারেন্স। ফাইলটিতে foo.rb
, __FILE__
হিসাবে ব্যাখ্যা করা হবে"foo.rb"
।
সম্পাদনা করুন: লুব বয়েস তার মন্তব্যে যা বলেছিল তার থেকে রুবি ১.৯.২ এবং ১.৯.৩ কিছুটা আলাদা আচরণ করে বলে মনে হচ্ছে । এই ফাইলগুলির সাথে:
# test.rb
puts __FILE__
require './dir2/test.rb'
# dir2/test.rb
puts __FILE__
চলমান ruby test.rb
আউটপুট হবে
test.rb
/full/path/to/dir2/test.rb
`__FILE__`
পেতে লিখুন __FILE__
।
এর মানটি __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
This means that if you have any calls to Dir.chdir anywhere else in your application, this path will expand incorrectly.
পথটি আমার পরীক্ষার অধীনে সঠিকভাবে প্রসারিত হয়েছিল। আমার রুবি সংস্করণটি ২.৩.।, সম্ভবত নতুন রুবি সংস্করণটি এই সমস্যাটিকে ঠিক করেছে।
__FILE__
কোডটি চালানো হচ্ছে এমন ফাইলের এক্সটেনশন সহ ফাইলের নাম।
ইন foo.rb
, __FILE__
"foo.rb" হবে।
তাহলে foo.rb
Dir ছিল /home/josh
তারপর File.dirname(__FILE__)
ফিরে আসবে /home/josh
।
উইন্ডোজ সংস্করণ রুবিতে যাইহোক, আমি কেবলমাত্র পরীক্ষা করেছিলাম এবং __FILE__
ফাইলটির পুরো পথটি নেই। পরিবর্তে এটি ফাইলটি যেখানে এটি চালিত হচ্ছে তার সাথে সম্পর্কিত পথ রয়েছে contains
পিএইচপি- __FILE__
তে সম্পূর্ণ পথ (যা আমার মতে পছন্দনীয়)। এ কারণেই, রুবিতে আপনার পাথগুলি পোর্টেবল করার জন্য, আপনাকে সত্যই এটি ব্যবহার করতে হবে:
File.expand_path(File.dirname(__FILE__) + "relative/path/to/file")
আমার নোট করা উচিত যে রুবি ১.৯.১ __FILE__
এ ফাইলের পুরো পথ রয়েছে, উপরের বর্ণনাটি ছিল যখন আমি রুবি ১.৮..7 ব্যবহার করেছি।
রুবি 1.8.7 এবং 1.9.1 উভয়ের সাথে সামঞ্জস্যপূর্ণ হওয়ার জন্য (1.9 সম্পর্কে নিশ্চিত নয়) আপনার উপরেরটি দেখানো কনস্ট্রাক্ট ব্যবহার করে আপনার ফাইলের প্রয়োজন should
File.expand_path(File.dirname(__FILE__) + "/relative/path/to/file")
File.expand_path( File.join( File.dirname(__FILE__), "relative", "path", "to", "file") )