কিছু দুর্দান্ত রুবি কৌশল খুঁজছেন?
আপনি তাদের খুঁজে পেয়েছেন!
এই নিবন্ধে আমি আপনার সাথে আমার প্রিয় কিছু শেয়ার করতে চাই।
বিষয়বস্তু
- 1টি গভীর অনুলিপি
- ল্যাম্বডা কল করার 2টি ভিন্ন উপায়
- 3 একটি প্রাক-ভরা অ্যারে তৈরি করা
- 4 সত্য, মিথ্যা এবং শূন্য হল বস্তু
- 5 Lambdas আর্গুমেন্টের ব্যাপারে কঠোর, কিন্তু Procs পাত্তা দেয় না
- 6 irb বা ফাইল ছাড়াই সরাসরি কোড এক্সিকিউট করুন
- 7 আপনার নিজস্ব মিনি-আইআরবি এক কমান্ডে
- 8 একটি বস্তুকে আনফ্রিজ করুন (বিপদ!)
- বিশেষ পরিচয় সহ ৯টি বস্তু
- 10 irb বা pry-এ বড় আউটপুট এড়িয়ে চলুন
- 11 বর্তমান কল স্ট্যাক পেতে কলার পদ্ধতি ব্যবহার করে
- 12 বোনাস! যেকোনো মানকে বুলিয়ানে রূপান্তর করুন
- 13 বোনাস! একটি পরিবর্তনশীল নাম হিসাবে একটি কীওয়ার্ড ব্যবহার করুন
- 14 সারাংশ
- 14.1 সম্পর্কিত
গভীর অনুলিপি
যখন আপনি copy
করেন একটি অবজেক্ট যাতে অন্যান্য অবজেক্ট থাকে, যেমন একটি Array
, শুধুমাত্র এই বস্তুর একটি রেফারেন্স অনুলিপি করা হয়.
আপনি এটি এখানে কর্মে দেখতে পারেন:
খাদ্য =%w( রুটি দুধ কমলা )food.map(&:object_id) # [35401044, 35401020, 35400996]food.clone.map(&:object_id) # [35401044, 35401044, 3540109, 3540109] 4020
Marshal
ব্যবহার করে ক্লাস, যা সাধারণত সিরিয়ালাইজেশনের জন্য ব্যবহৃত হয়, আপনি একটি বস্তুর একটি 'গভীর অনুলিপি' তৈরি করতে পারেন।def deep_copy(obj) Marshal.load(Marshal.dump(obj))endফলাফল:
deep_copy(food).map(&:object_id) # [42975648, 42975624, 42975612]ল্যাম্বডা কল করার বিভিন্ন উপায়
my_lambda =-> { 'হ্যালো' বলে }my_lambda.callmy_lambda[]my_lambda.()my_lambda.===যদি সম্ভব হয়, আপনার প্রথমটির সাথে লেগে থাকা উচিত (
call
), কারণ এটি সবচেয়ে বেশি মানুষ জানে।একটি প্রাক-ভরা অ্যারে তৈরি করা হচ্ছে
অ্যারে ক্লাস একটি আর্গুমেন্ট + একটি ব্লক নিতে পারে, যা আপনাকে
n
দিয়ে একটি অ্যারে তৈরি করতে দেয় উপাদান ডিফল্টরূপে এই উপাদানগুলি হলnil
, কিন্তু যদি আপনার একটি ব্লক থাকে, তাহলে মানগুলি থেকে আসবে।উদাহরণ :
Array.new(10) { র্যান্ড 300 }এটি 0 এবং 299 এর মধ্যে 10টি র্যান্ডম সংখ্যা সহ একটি অ্যারে তৈরি করবে৷
সত্য, মিথ্যা এবং শূন্য হল বস্তু
true.class # TrueClassfalse.class # FalseClassnil.class # NilClassএই বস্তুগুলির শুধুমাত্র একটি অনুলিপি আছে, এবং আপনি চাইলেও এর বেশি তৈরি করতে পারবেন না।
এটি অ্যাকশনে সিঙ্গলটন প্যাটার্ন।
ল্যাম্বডাস আর্গুমেন্টের ব্যাপারে কঠোর, কিন্তু Procs পাত্তা দেয় না
my_lambda =->(a, b) { a + b }my_proc =Proc.new { |a, b| a + b }my_lambda.call(2)# আর্গুমেন্ট ত্রুটি:আর্গুমেন্টের ভুল সংখ্যা (2 এর জন্য 1)my_proc.call(2)# TypeError:nil কে Fixnum এ জোর করা যাবে নাirb বা ফাইল ছাড়াই সরাসরি কোড এক্সিকিউট করুন
ruby
কমান্ডের বেশ কয়েকটি আকর্ষণীয় বিকল্প রয়েছে যা আপনি ব্যবহার করতে পারেন।উদাহরণস্বরূপ,
-e
দিয়ে ফ্ল্যাগ আপনি এক্সিকিউট করার জন্য কোডের একটি স্নিপেটে পাস করতে পারেন।ruby -e '5.times { puts "Fun with Ruby" }'আপনি
-h
ব্যবহার করে আরও খুঁজে পেতে পারেন পতাকা।একটি কমান্ডে আপনার নিজস্ব মিনি-আইআরবি
কখনও জানতে চেয়েছেন কিভাবে
৷irb
কাজ করে? ওয়েল, এটি এটির একটি অতি-সাধারণ সংস্করণ৷মনে রাখবেন 'REPL' এর অর্থ কী:Read-Eval-Print লুপ।
রুবি -এন -ই 'পি ইভাল($_)'আপনি একটি প্রম্পট পাবেন না, তবে এগিয়ে যান এবং কিছু রুবি কোড টাইপ করুন৷
৷"A" * 5"AAAAA"এটি কাজ করে কারণ
-n
পতাকা এটি করে:-n অনুমান 'while gets(); ... শেষ' আপনার স্ক্রিপ্টের চারপাশে লুপ করুনএবং
$_
একটি বিশ্ব পরিবর্তনশীল. যেটিতে নিম্নলিখিতগুলি রয়েছে:গেটস বা রিডলাইন দ্বারা স্ট্রিংয়ের শেষ ইনপুট লাইন।একটি বস্তুকে আনফ্রিজ করুন (বিপদ!)
কোনো বস্তুকে আনফ্রিজ করার কোনো রুবি পদ্ধতি নেই, তবে
Fiddle
ব্যবহার করে ক্লাস আপনি এটি ঘটতে রুবি ইন্টারনাল এ পৌঁছাতে পারেন।'fiddle'str ='water'.freezestr.frozen প্রয়োজন? # truememory_address =str.object_id * 2Fiddle::Pointer.new(memory_address)[1] &=~8str.frozen? # মিথ্যাবাড়িতে এটি চেষ্টা করবেন না!
বিশেষ পরিচয় সহ বস্তু
রুবি অবজেক্টের একটি শনাক্তকারী বা 'আইডি' নম্বর থাকে যা আপনি
object_id
ব্যবহার করে অ্যাক্সেস করতে পারেন পদ্ধতি কিছু বস্তুর একটি নির্দিষ্ট আইডি থাকে:ফিক্সনাম, সত্য, মিথ্যা এবং শূন্য।false.object_id # 0true.object_id # 2nil.object_id # 41.object_id # 32.object_id # 5ফিক্সনাম আইডি এই সূত্রটি ব্যবহার করে:(সংখ্যা * 2) + 1।
বোনাস:সর্বাধিক ফিক্সনাম হল
1073741823
, এর পরে আপনি একটি বিগনাম অবজেক্ট পাবেন।irb বা pry-এ বড় আউটপুট এড়িয়ে চলুন
আপনি যদি
irb
এ কাজ করেন এবং কিছু সত্যিই বড় অ্যারে বা স্ট্রিং এর বিষয়বস্তু দিয়ে আপনার স্ক্রীন পূরণ করা এড়াতে চান আপনি শুধু;
যোগ করতে পারেন আপনার কোডের শেষে।উদাহরণ :
'rest-client'RestClient.get('www.rubyguides.com');
;
ছাড়াই আবার চেষ্টা করুন পার্থক্য দেখতে 🙂বর্তমান কল স্ট্যাক পেতে কলার পদ্ধতি ব্যবহার করে
এখানে একটি কোড উদাহরণ:
def foo barenddef বার Callerendfoo রাখেআউটপুট :
-:3:in 'foo'-:10:in '' আপনার যদি বর্তমান পদ্ধতির নামের প্রয়োজন হয় তবে আপনি
__method__
ব্যবহার করতে পারেন অথবা__callee__
.বোনাস! যেকোনো মানকে বুলিয়ানে রূপান্তর করুন
!!(1) # সত্য!!(শূন্য) # মিথ্যাবোনাস! একটি পরিবর্তনশীল নাম হিসাবে একটি কীওয়ার্ড ব্যবহার করুন
def foo (if:nil) binding.local_variable_get(:if)endfoo(if:true)সারাংশ
আমি আশা করি আপনি এই রুবি কৌশলগুলি উপভোগ করেছেন!
আপনার বন্ধুদের সাথে সেগুলি শেয়ার করুন যাতে তারাও সেগুলি উপভোগ করতে পারে এবং আমার ব্লগে সদস্যতা নিতে পারে৷ নীচের ফর্মে যাতে আপনি আমার পরবর্তী পোস্ট মিস করবেন না। 🙂