একটি বিদ্যমান স্ট্রিং যোগ করা হচ্ছে


104

বিদ্যমান স্ট্রিংয়ের সাথে যুক্ত করার জন্য এটি আমি করছি।

s = 'hello'
s.gsub!(/$/, ' world');

একটি বিদ্যমান স্ট্রিং সংযুক্ত করার আরও ভাল উপায় আছে?

উত্তর দেওয়ার আগে কেউ পরামর্শ দেওয়ার আগে লেমমে দেখান যে এটির কাজ করে না

s = 'hello'
s.object_id
s = s + ' world'
s.object_id 

উপরের ক্ষেত্রে অবজেক্ট_আইডি দুটি ক্ষেত্রে পৃথক হবে।

উত্তর:


166

আপনি <<জায়গাটিতে স্ট্রিংয়ের সাথে যুক্ত করতে ব্যবহার করতে পারেন ।

s = "foo"
old_id = s.object_id
s << "bar"
s                      #=> "foobar"
s.object_id == old_id  #=> true

1
কীভাবে করবেন <<! "বার", অবজেক্টের অবস্থা পরিবর্তন করতে হিসাবে? কনক্যাট! ("বার") কাজ করে না ...
xxjjnn

@ রেনবোপনি যেমন আমার উত্তরটি দেখায়, <<ইতিমধ্যে অবজেক্টের অবস্থা পরিবর্তন করে। তাই করে concat
sepp2k

সর্বদা নয়: আইআরবি (মূল): 038: 0> উইজেট.নোটেস.ওহেন (: লেখক_আইডি => ক) .ফার্স.মেসেজ.কনকাট ("আলু") => "ওয়াই হ্যালো থার! = ডিপোটাটো" আইআরবি (মূল): 039: 0> উইজেট.নোট.স. (যেখানে: লেখক_আইডি => ক) .ফার্স.মেসেজ => "ওয়াই হ্যালো থার! = ডি" # উইজেট হ'ল উইজেটের উদাহরণ। এটিতে নোট থাকতে পারে। বার্তাটি অ্যাক্সেসযোগ্য।
xxjjnn

1
@ রেনবোপনি হ্যাঁ, সর্বদা। আপনার ক্ষেত্রে আপনি অপরিবর্তিত স্ট্রিংটি ফিরে পাবেন কারণ widget.notes.where(:author_id => a).firstসম্ভবত প্রতিটি সময় একটি নতুন অবজেক্ট ফিরে আসে, যার নিজস্ব স্ট্রিং থাকবে।
sepp2k

আহ। আমি সবেমাত্র একটি নতুন প্রশ্ন জিজ্ঞাসা করেছি stackoverflow.com/questions/13989619/… সহায়তার জন্য ধন্যবাদ!
xxjjnn

56

আপনি নিম্নলিখিত ব্যবহার করতে পারেন:

s.concat("world")

4
<<পাশাপাশি শৃঙ্খলযোগ্য হওয়া উচিত, যেহেতু এটি স্ট্রিংটি দেয়।
স্কটিসিয়াস

প্রকৃতপক্ষে - এবং << লিখতেও খাটো এবং সি ++ আউটের বৈকল্পিকের অনুরূপ। << সৌন্দর্য!
শেভি

1
দ্রষ্টব্য: এটি মূল স্ট্রিংটি পরিবর্তন করে। সাবধানে ব্যবহার করুন।
দামিয়েন রোচে

3

আমি জিজ্ঞাসা করতে পারি কেন এটি গুরুত্বপূর্ণ?

আমি জানি যে এটি আপনার প্রশ্নের সরাসরি উত্তর নয়, তবে আপনি যে স্ট্রিংয়ের আইডি সংরক্ষণ করার চেষ্টা করছেন তা ইঙ্গিত দিতে পারে যে আপনি কী করতে চাইছেন সেদিকে আপনার আবার নজর দেওয়া উচিত।

উদাহরণস্বরূপ, আপনি সন্ধান করতে পারেন যে স্ট্রিংয়ের অবজেক্ট আইডির উপর নির্ভর করা এমন বাগগুলিতে নিয়ে যাবে যা ট্র্যাক ডাউন করা বেশ শক্ত।


4
রেফারেন্স দ্বারা পরামিতি পরিবর্তন করতে পারেন? (যা সম্পূর্ণ
ওওপ

4
বা কেবলমাত্র অনেকগুলি নতুন অবজেক্ট তৈরি করা এড়াতে? এটা পুরোপুরি যুক্তিসঙ্গত।
জেমস এ রোজেন

1
অবশ্যই আপনি যদি জায়গায় একটি স্ট্রিং সংশোধন করেন এবং একটি নতুন অবজেক্ট তৈরি হয়, তবে পুরানো বস্তুটি আবর্জনা সংগ্রহ করে? আমরা তৈরি স্ট্রিং অবজেক্টের সংখ্যা সম্পর্কে সত্যই চিন্তা করা উচিত?
শ্যাডোফায়ারবার্ড

@ শ্যাডোফায়ারবার্ড সম্ভবত তিনি এমন একটি পদ্ধতি লিখেছেন যা সেকেন্ডে 1000 বার বার বলা হয়ে থাকে এবং তার আবর্জনা সংগ্রহকারীকে একগুচ্ছ তারে ঝাঁকিয়ে রাখতে চায় না।
মাইকেল ডারস্ট


1

এখানে অন্য উপায়:

fist_segment = "hello,"
second_segment = "world."
complete_string = "#{first_segment} #{second_segment}"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.