ওপি লিখেছেন
এটি আমার কাছে আশ্চর্যজনক বলে মনে হয় যে উপরে নির্মাণগুলি প্রত্যাশিত ফলাফলটি দেয় না। এর কারণ কী? এই আচরণটি যুক্তিসঙ্গত হলে পরিস্থিতিগুলি কী কী?
না 'এটা করা যায়?' তবে যে প্রশ্নটি আসলে জিজ্ঞাসা করা হয়েছিল, তার আগে যা জিজ্ঞাসা করা হয়নি তার উত্তর দিতে:
$ irb
2.1.5 :001 > (0..4)
=> 0..4
2.1.5 :002 > (0..4).each { |i| puts i }
0
1
2
3
4
=> 0..4
2.1.5 :003 > (4..0).each { |i| puts i }
=> 4..0
2.1.5 :007 > (0..4).reverse_each { |i| puts i }
4
3
2
1
0
=> 0..4
2.1.5 :009 > 4.downto(0).each { |i| puts i }
4
3
2
1
0
=> 4
যেহেতু রিভার্স_ইচ সম্পূর্ণ অ্যারে তৈরি করার দাবি করা হয়, তাই ডাউনটো স্পষ্টতই আরও কার্যকর হতে চলেছে। কোনও ভাষা ডিজাইনার এমনকি অনুরোধের মতো বিষয়গুলি বাস্তবায়নের বিষয়ে জিজ্ঞাসা করা প্রকৃত প্রশ্নের উত্তরের সাথে সম্পর্ক স্থাপনের বিষয়টি বিবেচনা করতে পারে fact
আসলে জিজ্ঞাসা করা প্রশ্নের উত্তর দিতে ...
কারণটি হ'ল রুবি একটি অন্তহীন অবাক করা ভাষা। কিছু বিস্ময়কর আনন্দদায়ক, তবে এমন অনেক আচরণ রয়েছে যা নিখুঁতভাবে ভেঙে গেছে। এমনকি যদি নীচের কয়েকটি উদাহরণ নতুন রিলিজ দ্বারা সংশোধন করা হয়, তবে আরও প্রচুর পরিমাণে রয়েছে এবং এগুলি মূল নকশার মানসিকতার প্রতি ইঙ্গিত হিসাবে রয়ে গেছে:
nil.to_s
.to_s
.inspect
"" এর ফলাফল কিন্তু
nil.to_s
# .to_s # Don't want this one for now
.inspect
ফলাফল স্বরূপ
syntax error, unexpected '.', expecting end-of-input
.inspect
^
আপনি সম্ভবত প্রত্যাশা করবেন << এবং অ্যারেগুলিতে সংযোজন করার জন্য একই হতে হবে, তবে
a = []
a << *[:A, :B] # is illegal but
a.push *[:A, :B] # isn't.
আপনি সম্ভবত 'গ্রেপ' এর ইউনিক্স কমান্ড-লাইনের সমতুল্য আচরণ করার প্রত্যাশা করতে পারেন তবে এটির নাম থাকা সত্ত্বেও এটি === মিলছে না = ~।
$ echo foo | grep .
foo
$ ruby -le 'p ["foo"].grep(".")'
[]
বিভিন্ন পদ্ধতি অপ্রত্যাশিতভাবে একে অপরের অপর নাম, তাই আপনাকে একই জিনিসটির একাধিক নাম শিখতে হবে - যেমন find
এবং detect
- এমনকি আপনি বেশিরভাগ বিকাশকারীকে পছন্দ করেন এবং কেবল কখনও কখনও এক বা অন্যটি ব্যবহার করেন। একই ঘটনা ঘটে যায় জন্য size
, count
এবংlength
, ক্লাস যা প্রতিটি ভিন্নভাবে সংজ্ঞায়িত, অথবা এক বা দুই আদৌ সংজ্ঞায়িত করেন না ছাড়া।
যদি না কেউ অন্য কিছু প্রয়োগ না করে - যেমন কোর পদ্ধতিটি tap
বিভিন্ন অটোমেশন লাইব্রেরিতে স্ক্রিনে কিছু চাপতে পুনরায় সংজ্ঞায়িত করা হয়েছে। কী চলছে তা সন্ধানের জন্য শুভকামনা, বিশেষত যদি কিছু অন্য মডিউল দ্বারা প্রয়োজনীয় কিছু মডিউল অপ্রকাশিত কিছু করার জন্য আরও একটি মডিউল বানিয়ে ফেলেছে।
এনভায়রনমেন্ট ভেরিয়েবল অবজেক্ট, ENV 'মার্জ' সমর্থন করে না, তাই আপনাকে লিখতে হবে
ENV.to_h.merge('a': '1')
বোনাস হিসাবে, আপনি নিজের বা অন্য কারও কি ধরণের স্থিতিশীল তা নতুন করে সংজ্ঞায়িত করতে পারেন যদি সেগুলির কী হওয়া উচিত about