আমি গ্যারি রাইটের ব্যাখ্যাও খুব সহায়ক হিসাবে পেয়েছি।
http://www.ruby-forum.com/topic/1393096#990065
গ্যারি রাইটের উত্তরটি হ'ল -
http://www.ruby-doc.org/core/classes/Array.html
দস্তাবেজগুলি অবশ্যই আরও স্পষ্ট হতে পারে তবে আসল আচরণটি স্বনির্ভর এবং কার্যকর useful দ্রষ্টব্য: আমি স্ট্রিংয়ের 1.9.X সংস্করণ ধরে নিচ্ছি।
এটি নিম্নলিখিত পদ্ধতিতে নম্বর বিবেচনা করতে সহায়তা করে:
-4 -3 -2 -1 <-- numbering for single argument indexing
0 1 2 3
+---+---+---+---+
| a | b | c | d |
+---+---+---+---+
0 1 2 3 4 <-- numbering for two argument indexing or start of range
-4 -3 -2 -1
সাধারণ (এবং বোধগম্য) ভুলটি খুব ধরে নেওয়া হয় যে একক যুক্তি সূচকের শব্দার্থক দুটি আর্গুমেন্টের দৃশ্যে (বা ব্যাপ্তি) প্রথম আর্গুমেন্টের শব্দার্থক হিসাবে একই
। তারা বাস্তবে একই জিনিস নয় এবং ডকুমেন্টেশনগুলি এটি প্রতিফলিত করে না। ত্রুটিটি অবশ্যই ডকুমেন্টেশনে রয়েছে এবং প্রয়োগের ক্ষেত্রে নয়:
একক যুক্তি: সূচক স্ট্রিংয়ের মধ্যে একটি একক অক্ষরের অবস্থান উপস্থাপন করে। ফলাফলটি হ'ল সূচকটিতে পাওয়া একক অক্ষরের স্ট্রিং বা শূন্যতার কারণ প্রদত্ত সূচকে কোনও অক্ষর নেই।
s = ""
s[0] # nil because no character at that position
s = "abcd"
s[0] # "a"
s[-4] # "a"
s[-5] # nil, no characters before the first one
দুটি পূর্ণসংখ্যার যুক্তি: আর্গুমেন্টগুলি নিষ্কাশন করতে বা প্রতিস্থাপন করার জন্য স্ট্রিংয়ের একটি অংশ সনাক্ত করে। বিশেষত, স্ট্রিংয়ের শূন্য-প্রস্থের অংশগুলিও চিহ্নিত করা যায় যাতে স্ট্রিংয়ের সামনের বা শেষের অংশ সহ বিদ্যমান অক্ষরগুলির আগে বা পরে পাঠ্য সন্নিবেশ করা যায়। এই ক্ষেত্রে, প্রথম যুক্তি একটি চরিত্রের অবস্থান চিহ্নিত করে না বরং পরিবর্তে উপরের চিত্রের মতো বর্ণের মধ্যে স্থান চিহ্নিত করে। দ্বিতীয় যুক্তি দৈর্ঘ্য, যা 0 হতে পারে।
s = "abcd" # each example below assumes s is reset to "abcd"
To insert text before 'a': s[0,0] = "X" # "Xabcd"
To insert text after 'd': s[4,0] = "Z" # "abcdZ"
To replace first two characters: s[0,2] = "AB" # "ABcd"
To replace last two characters: s[-2,2] = "CD" # "abCD"
To replace middle two characters: s[1..3] = "XX" # "aXXd"
একটি পরিসীমা আচরণ বেশ আকর্ষণীয়। প্রারম্ভিক পয়েন্টটি প্রথম আর্গুমেন্টের সমান যখন দুটি আর্গুমেন্ট সরবরাহ করা হয় (উপরে বর্ণিত হিসাবে) তবে পরিসরের শেষ বিন্দুটি 'একক অক্ষর' বা দুটি সংখ্যার আর্গুমেন্টের সাথে "প্রান্তের অবস্থান" হিসাবে অক্ষরের অবস্থান হতে পারে। পার্থক্যটি ডাবল-ডট পরিসর বা ট্রিপল-ডট পরিসর ব্যবহৃত হয় কিনা তা দ্বারা নির্ধারিত হয়:
s = "abcd"
s[1..1] # "b"
s[1..1] = "X" # "aXcd"
s[1...1] # ""
s[1...1] = "X" # "aXbcd", the range specifies a zero-width portion of
the string
s[1..3] # "bcd"
s[1..3] = "X" # "aX", positions 1, 2, and 3 are replaced.
s[1...3] # "bc"
s[1...3] = "X" # "aXd", positions 1, 2, but not quite 3 are replaced.
আপনি যদি এই উদাহরণগুলির মধ্যে ফিরে যান এবং জোর করে এবং ডাবল বা সীমা সূচক উদাহরণগুলির জন্য একক সূচক শব্দার্থ ব্যবহার করেন তবে আপনি কেবল বিভ্রান্ত হবেন। আসকি আচরণের মডেল করার জন্য আপনি ascii ডায়াগ্রামে প্রদর্শিত বিকল্প নম্বরটি ব্যবহার করতে পারেন।