আমি require
যদি রুবির কোনও আপেক্ষিক ফাইল চাই এবং আমি এটি 1.8.x এবং> = 1.9.2 উভয় ক্ষেত্রেই কাজ করতে চাই তবে সবচেয়ে ভাল অনুশীলনটি কী ?
আমি কয়েকটি বিকল্প দেখতে পাচ্ছি:
- শুধু কি
$LOAD_PATH << '.'
এবং সবকিছু ভুলে - করা
$LOAD_PATH << File.dirname(__FILE__)
require './path/to/file'
- চেক
RUBY_VERSION
<1.9.2, তারপর সংজ্ঞায়িতrequire_relative
হিসাবেrequire
, ব্যবহারrequire_relative
সর্বত্র যেখানে এটি পরে দরকার require_relative
ইতিমধ্যে উপস্থিত আছে কিনা তা পরীক্ষা করে দেখুন , যদি তা হয় তবে আগের অবস্থার মতো এগিয়ে যাওয়ার চেষ্টা করুন- অদ্ভুত নির্মাণগুলি ব্যবহার করুন - হায় আফসোস তারা রুবি ১.৯ এ কাজ করে না বলে মনে হয়, কারণ, উদাহরণস্বরূপ:
require File.join(File.dirname(__FILE__), 'path/to/file')
$ cat caller.rb require File.join(File.dirname(__FILE__), 'path/to/file') $ cat path/to/file.rb puts 'Some testing' $ ruby caller Some testing $ pwd /tmp $ ruby /tmp/caller Some testing $ ruby tmp/caller tmp/caller.rb:1:in 'require': no such file to load -- tmp/path/to/file (LoadError) from tmp/caller.rb:1:in '<main>'
- এমনকি অযৌক্তিক নির্মাণ: মনে হচ্ছে এটি কাজ করে তবে এটি অদ্ভুত এবং দেখতে খুব সুন্দর নয়।
require File.join(File.expand_path(File.dirname(__FILE__)), 'path/to/file')
- ব্যাকপোর্টস রত্ন ব্যবহার করুন - এটি একরকম ভারী, এর জন্য রুবিজেমসের পরিকাঠামো প্রয়োজন এবং এতে প্রচুর পরিমাণে অন্যান্য কাজের পরিমাণ রয়েছে, যখন আমি কেবল
require
আপেক্ষিক ফাইলগুলির সাথে কাজ করতে চাই ।
স্ট্যাকওভারফ্লোতে একটি ঘনিষ্ঠভাবে সম্পর্কিত প্রশ্ন রয়েছে যা আরও কয়েকটি উদাহরণ দেয় তবে এটি একটি পরিষ্কার উত্তর দেয় না - এটি একটি সেরা অনুশীলন।
আমার অ্যাপ্লিকেশনটি রুবি <1.9.2 এবং> = 1.9.2 উভয়কে চালিত করার জন্য কি কোনও শালীন, স্বীকৃত-সর্বজনীন সার্বজনীন সমাধান রয়েছে?
হালনাগাদ
স্পষ্টতা: আমি "আপনি এক্স করতে পারেন" এর মতো উত্তরগুলি চাই না - আসলে, আমি ইতিমধ্যে প্রশ্নের বেশিরভাগ পছন্দ উল্লেখ করেছি। আমি যৌক্তিকতা চাই , অর্থাত্ কেন এটি সর্বোত্তম অনুশীলন, এর উপকারিতা কী এবং অন্যদের মধ্যে কেন এটি চয়ন করা উচিত।
a.rb
দোভাষীকে পড়তে এবং ফাইলের বিষয়বস্তু বিশ্লেষণ করতে চান b.rb
(সাধারণত একই দির যেমন থাকে a.rb
) তবে আপনি কেবল লিখতে পারেন require 'b'
এবং এটি ঠিক আছে কারণ ডিফল্ট অনুসন্ধানের পথে বর্তমান ডিরেক্টরি অন্তর্ভুক্ত রয়েছে। আরও আধুনিক রুবি ১.৯-এ আপনাকে require_relative 'b'
এই ক্ষেত্রে লিখতে require 'b'
হবে যেমন কেবল স্ট্যান্ডার্ড লাইব্রেরির পাথ অনুসন্ধান করতে হবে। সরল স্ক্রিপ্টগুলির যথাযথভাবে ইনস্টল করা যাচ্ছে না (যেমন, স্ক্রিপ্টগুলি নিজেরাই ইনস্টল করুন ) forward
backports
কেবল এই জন্য ব্যবহার করতে পারেন require_relative
, আমার উত্তরটি দেখুন ...
require
এবংrequire_relative
?