সাধারণভাবে, যে পদ্ধতিগুলি শেষ হয় !সেগুলি নির্দেশ করে যে পদ্ধতিটি যার দিকে ডেকেছে সেটিকে পরিবর্তন করবে । রুবি এগুলিকে " বিপজ্জনক পদ্ধতি " হিসাবে অভিহিত করে কারণ তারা এমন পরিবর্তন করে যে অন্য কারও কাছে রেফারেন্স থাকতে পারে। স্ট্রিংগুলির জন্য এখানে একটি সাধারণ উদাহরণ:
foo = "A STRING" # a string called foo
foo.downcase! # modifies foo itself
puts foo # prints modified foo
এটি আউটপুট দেবে:
a string
স্ট্যান্ডার্ড লাইব্রেরিগুলিতে, অনেকগুলি জায়গা রয়েছে যা আপনি একই নামকরণ পদ্ধতির জোড়া দেখতে পাবেন, একটিতে !এবং একটি ছাড়াও। এগুলি ছাড়া "নিরাপদ পদ্ধতি" বলা হয় এবং তারা অনুলিপি কলি পরিবর্তিত অনুলিপি সহ অনুলিপি প্রয়োগ করে পরিবর্তিত কপির সাথে মূলটির একটি অনুলিপি ফেরত দেয় । এখানে ছাড়া একই উদাহরণ এখানে !:
foo = "A STRING" # a string called foo
bar = foo.downcase # doesn't modify foo; returns a modified string
puts foo # prints unchanged foo
puts bar # prints newly created bar
এই ফলাফলগুলি:
A STRING
a string
মনে রাখবেন এটি কেবল একটি সম্মেলন, তবে প্রচুর রুবি শ্রেণি এটি অনুসরণ করে। এটি আপনাকে আপনার কোডে কী পরিবর্তন করা হচ্ছে তা ট্র্যাক রাখতে সহায়তা করে।