যখন কোনও কোঁকড়া ধনুর্বন্ধনী নেই তখন কেন রুবিতে স্ট্রিং ইন্টারপোলেশন কাজ করে?


90

রুবিতে স্ট্রিং ইন্টারপোলেশন ব্যবহারের সঠিক উপায়টি হ'ল:

name = "Ned Stark"
puts "Hello there, #{name}" #=> "Hello there, Ned Stark"

আমি সর্বদা এটি ব্যবহার করার ইচ্ছা করি।

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

@name = "Ned Stark"
puts "Hello there, #@name" #=> "Hello there, Ned Stark"

এবং এটি অ-দৃষ্টান্তের পরিবর্তনশীল হিসাবে একই জিনিসটি ব্যবহার করা কার্যকর হয় না।

name = "Ned Stark"
puts "Hello, there, #name" #=> "Hello there, #name"

আমি এটি 1.9.2 এবং 1.8.7 উভয়ই সাফল্যের সাথে চেষ্টা করেছি।

কেন এই কাজ করে? দোভাষী এখানে কী করছেন?

উত্তর:


103

ফ্ল্যাগান এবং মাতসুমোটোর রবি প্রোগ্রামিং ল্যাঙ্গুয়েজ অনুসারে :

স্ট্রিং আক্ষরিকের মধ্যে সংক্ষিপ্ত রূপটি প্রকাশ করার জন্য যখন কেবল কোনও গ্লোবাল, উদাহরণ বা শ্রেণি পরিবর্তকের একটি রেফারেন্স হয়, তখন কোঁকড়া ধনুর্বন্ধনী বাদ দেওয়া যেতে পারে।

সুতরাং নিম্নলিখিতটি সমস্ত কাজ করা উচিত:

@var = "Hi"
puts "#@var there!"  #=> "Hi there!"

@@var = "Hi"
puts "#@@var there!" #=> "Hi there!"

$var = "Hi"
puts "#$var there!"  #=> "Hi there!"

4
দুর্দান্ত প্রশ্ন, বিটিডব্লিউ। ফিরে যেতে এবং আমি যে ভাষাটি ভুলে গিয়েছিলাম তার ছোট্ট কোণগুলি খুঁজে পেয়ে খুব ভাল লাগল।
tsherif

4
যদিও আপনার উত্তরে কোনও কারণ বা কী চলছে তা না থাকলেও আমি খুঁজে পাচ্ছি যে কারণটি পেরেক করা শক্ত। এমনকি Matz প্রায়শই মন্তব্য করা পুরানো বার্তা বোর্ডগুলি সাহায্য করছে না। তবে, আপনার উত্তরটি দেখায় যে এটি কেবল একটি ফ্লুকের বিপরীতে বৈশিষ্ট্য।
চার্লস ক্যালডওয়েল

4
যদিও আপনি কারণ হিসাবে আশা করছেন তা নিশ্চিত নই not আপনি একটি ডিজাইন সিদ্ধান্ত হিসাবে মানে? আমার ধারণাটি হ'ল এটি পার্লের মতো সিনট্যাক্সের চেষ্টা ছিল , কারণ আমি বিশ্বাস করি রুবি মূলত পার্ল ++ এর নিজের মধ্যে আসার আগেই এক ধরণের পার্ট হিসাবে ধারণা করেছিলেন।
tsirif

4
আমি একটি সম্পূর্ণ নুব এবং আমার আইডিই আমার কাছে এটি করা সম্পর্কে অভিযোগ করেছিল। তবে আমি নিজেকে দৃinc় বিশ্বাস করতে একটি কঠিন কাজ করছি যে এটি ভাল স্টাইল। এটি অর্থহীনভাবে বেমানান এবং এর একটি নেতিবাচক দিক রয়েছে - উদাহরণস্বরূপ যদি আমার কাছে 100 মানের সাথে উদাহরণের পরিবর্তনশীল @ দূরত্ব থাকে এবং "# @ দূরত্ব" এর মত একটি এক্সপ্রেশন ব্যবহার করে "100 মি" এর মতো কিছু বলার মতো একটি স্ট্রিং তৈরি করতে চান আমি কেবল একটি ফাঁকা স্ট্রিং পাব কারণ দুরত্বের কোনও উদাহরণ নেই। সুতরাং এটি পুরোপুরি খারাপ শৈলী মত শোনাচ্ছে।
ভয়ংকর

4
@ বিপজ্জনক মেমরি ওহ এটি অবশ্যই খারাপ স্টাইল। সে কারণেই আমি আমার প্রশ্নটি করার সঠিক পদ্ধতিটি নির্দেশ করে শুরু করেছি। যাইহোক, আমি কেবল এটি অদ্ভুত দেখতে পেলাম যে এটি আদৌ ভাষার একটি বৈশিষ্ট্য এবং কেন এটি কাজ করেছে তা অবাক করেছিলাম। তারপরে আবার কোনও বাক্যটি সংমিশ্রনের সাথে শুরু করাও খারাপ শৈলী। তবে আপনি এখনও এবং লোকেরা এটি ব্যবহার করে দেখতে পাবেন। =)
চার্লস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.