ডাবল বনাম একক উদ্ধৃতি


171

আমি রুবির কাছে সত্যিই নতুন এবং আমি যখন ""বনাম ব্যবহার করা উচিত তখন একটি নির্দিষ্ট সময় আছে কিনা তা বোঝার চেষ্টা করছি ''

আমি বেশিরভাগ সময় একক উদ্ধৃতি ব্যবহার করেছি কারণ এটি টাইপ করা সহজ তবে আমার উচিত কিনা তা নিশ্চিত নই।

যেমন get 'user/new'বনামget "user/new"


12
আপনি কি নিশ্চিত যে এটি কোনও আরআর প্রশ্ন, এবং কেবল কোনও রুবি নয়?
ইগনাসিও ওয়াজকেজ-আব্রামস

যখন স্ট্রিং অন্তরঙ্গকরণ প্রয়োজন হয় না তখন বাছাই করার বিষয়ে কি কোনও প্রাসঙ্গিক স্টাইল গাইড থাকে?
উইলিয়াম এন্টারিকেন

উত্তর:


202

" " আপনাকে স্ট্রিং ইন্টারপোলেশন করতে সহায়তা করে, যেমন:

world_type = 'Mars'
"Hello #{world_type}"

1
সুতরাং মূলত, ডবল কোট সব সময় ব্যবহার করুন, তাই না?
নেকনারী

8
না - ডাবল উদ্ধৃতিগুলি কেবল স্ট্রিং ইন্টারপোলশনের অনুমতি দেয়। আপনি যদি স্ট্রিং ইন্টারপোলেশন না চান তবে আপনার ডাবল উদ্ধৃতি ব্যবহার করা উচিত নয়।
পানাহ

4
ডাবল কোটগুলি ব্যবহার করার কোনও কারণ নেই যখন কেবল আপনার দ্বিখণ্ডিত প্রয়োজন, কোনও উল্লেখযোগ্য পারফরম্যান্স প্রভাব নেই এবং এটি আপনাকে কী ব্যবহার করতে হবে তা আপনাকে ভাবিয়ে তুলবে। কেবল ডাবল-কোটেড স্ট্রিং ব্যবহার করুন।
ম্যাথিউস

137

বিবর্তন বাদে, আরেকটি পার্থক্য হ'ল 'এস্কেপ সিকোয়েন্স' একক উদ্ধৃতিতে কাজ করে না

puts 'a\nb' # just print a\nb 
puts "a\nb" # print a, then b at newline 

42
একক উদ্ধৃতিগুলি নিজেরাই পালাতে ব্যতীত, যেমন 'don\'t'
স্পারহাক

3
এটি এই Qvestion একটি খুব দরকারী উত্তর। আমি কখনই বুঝতে পারি নি যে সিঙ্গল কোটেশন হ'ল আঞ্চলিকভাবে একক উদ্ধৃতিগুলির মধ্যে মুদ্রণের জন্য उद्धरणগুলি বাদ দিয়ে যা এড়াতে হবে। ধন্যবাদ.
জে গডসে

6
এবং ব্যাকস্ল্যাশও চেষ্টা করে puts '\\'এটি কেবল একক স্ল্যাশ মুদ্রণ করবে। এখানে স্ট্যাকওভারফ্লো.com
প্রশ্নগুলি /

হ্যাঁ, একমাত্র দুটি ক্ষেত্রেই আপনি একক উদ্ধৃতি দিয়ে পালাতে পারবেন
অ্যালেক্সিস

@ অ্যালেক্স নিশ্চিত নন, পারফরম্যান্সে কিছুটা পার্থক্য থাকতে পারে
lfx_cool

40

আপনার প্রশ্নের উত্তর দেওয়ার জন্য, আপনি ""যখন স্ট্রিং ইন্টারপোলেশন করতে চান তখন ব্যবহার করতে হবে:

a = 2
puts "#{a}"

অন্যথায় সহজ উক্তি ব্যবহার করুন।

এছাড়াও আপনি যদি পারফরম্যান্সের ক্ষেত্রে কোনও পার্থক্য আছে কিনা তা নিয়ে ভাবছেন তবে স্ট্যাকওভারফ্লোতে এটি সম্পর্কে একটি দুর্দান্ত প্রশ্ন রয়েছে।

এবং আপনি যদি আরআর তে সত্যিই নতুন হন, আমি আপনাকে ভাষাটির বেসিকগুলি শিখতে একটি শালীন রুবি বইটি নেওয়ার জন্য অনুরোধ করছি। এটি আপনাকে কী করছে তা বুঝতে সহায়তা করবে (এবং আপনাকে রেলগুলি যাদু বলে ভাবতে বাধা দেবে)। আমি ব্যক্তিগতভাবে ওয়েল গ্রাউন্ড রুবিস্টকে সুপারিশ করি ।


34

স্ট্রিংয়ের মূল্যায়নের জন্য রুবিতে একক ''এবং ডাবল উদ্ধৃতিগুলির ""মধ্যে পার্থক্য রয়েছে ।

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

অতএব, 'stackoverflow'এবং "stackoverflow"উভয়ই কোনও পার্থক্য ছাড়াই স্ট্রিং ক্লাসের উদাহরণগুলি মূল্যায়ন করবে ।

পার্থক্য

দুটি আক্ষরিক রূপের স্ট্রিংগুলির মধ্যে অপরিহার্য পার্থক্য (একক বা ডাবল উদ্ধৃতি) হ'ল ডাবল কোটগুলি এস্কেপ সিকোয়েন্সগুলির অনুমতি দেয় যখন একক উদ্ধৃতি দেয় না!

একক উদ্ধৃতি দ্বারা নির্মিত একটি স্ট্রিং আক্ষরিক স্ট্রিং ইন্টারপোলেশন সমর্থন করে না এবং ক্রমগুলি এড়ায় না।

একটি পরিষ্কার উদাহরণ হ'ল:

"\n" # will be interpreted as a new line

যেহেতু

'\n' # will display the actual escape sequence to the user

একক উদ্ধৃতি দিয়ে ইন্টারপোলেটিং মোটেই কাজ করে না:

'#{Time.now}'
=> "\#{Time.now}" # which is not what you want..

ভাল অভ্যাস

রুবি Linters অধিকাংশ সুপারিশ হিসাবে আপনার স্ট্রিং জন্য একক উদ্ধৃতি লিটারেল ব্যবহার এবং ক্ষেপক / পলায়নপর সিকোয়েন্স ক্ষেত্রে ডবল বেশী জন্য যান।


1
সুতরাং আপনার যদি একটি = '\ n' এবং b = "# {a}" থাকে, b কে নতুন লাইন বা পালানোর ক্রম হিসাবে ব্যাখ্যা করা হবে?
নাথান টেম্পেলম্যান

4
যে মুহুর্তে আপনি একটি = '\ n' একটি বরাদ্দ করেন তার সাথে একটি 'বি' কে ইন্টারপোল্ট করে "\\ n" হিসাবে ব্যাখ্যা করা হয় আপনি কোনও নতুন লাইন পাবেন না। খ "" ev n "এ উন্নত হবে (আপনি পালানোর ক্রমটি পাবেন না এমন কোনও নতুন লাইন)। a = '\ n' => "\\ n" যেখানে a = "\ n" => "\ n"
আলোকাস

6

একটি একক-উদ্ধৃত স্ট্রিং ASCII এস্কেপ কোডগুলি (\ n, etc t ইত্যাদি) প্রক্রিয়া করে না এবং ডাবল-কোটেড উভয় ক্ষেত্রেই তারা স্ট্রিং ইন্টারপোলেশন করে না।

কোড এর উদাহরণ:

2.4.0 :004 >   puts 'Hello \n World'
Hello \n World

2.4.0 :005 > puts "Hello \n World"
Hello
World

অন্তরঙ্গকরণ উদাহরণ:

2.4.0 :008 >   age=27
 => 27

2.4.0 :009 > puts 'Age: #{age}'
Age: #{age}

2.4.0 :009 > puts "Age: #{age}"
Age: 27

4

মুদ্রণের ক্ষেত্রে "\ n" উত্তরের অনুরূপ, পার্থক্যটির আরও একটি ক্ষেত্রে নিম্নলিখিতটি

puts "\1"  -> get special character
puts '\1'  -> get \1

সুতরাং দেখে মনে হচ্ছে * ডাবল উদ্ধৃতিতে পালিয়ে যাওয়া চরিত্রে রূপান্তরিত হয়েছিল, তবে একক উদ্ধৃতিতে নয়। বিটিডাব্লু, নিয়মিত এক্সপ্রেশন যেমন, স্ট্রিংসসব (/ নিয়মিত প্রকাশ /, '\ 1, \ 2') ব্যবহার করার সময় এটি আউটপুটকে প্রভাবিত করবে


2

স্ট্রিং হিসাবে একটি রেগেক্স প্যাটার্নটি পাস করার সময় আপনি একক-কোট ব্যবহার করতে চাইবেন এমন আরও একটি কারণ:

এই রেজেক্স প্যাটার্নটি কাজ করবে কারণ একক উদ্ধৃতিতে পাস করেছে:

"123 ABC".match('\d')
=> #<MatchData "1">

এই রেজেক্স প্যাটার্নটি ব্যর্থ হবে কারণ ডাবল-কোটের মধ্যে পাস হয়েছে (এটির কাজ করতে আপনাকে এটির দ্বিগুণ-পালাতে হবে):

"123 ABC".match("\d")
=> nil

-8

এই নির্দিষ্ট ক্ষেত্রে, এটি আপনি কীভাবে লিখবেন তাতে কোনও পার্থক্য নেই। তারা সমতুল্য। এছাড়াও, আপনি আরও কিছু রুবি গাইড / টিউটোরিয়াল পড়তে চাইতে পারেন :)


4
এগুলি সমতুল্য নয়, কারণ ডাবল উদ্ধৃতিগুলি স্ট্রিং ব্যাখ্যার অনুমতি দেয়।
জেসন নোবেল

7
আপনি অত্যন্ত চতুর পর্যবেক্ষণ করার আগে "এই নির্দিষ্ট ক্ষেত্রে" অংশটি পড়েছেন?
জিও

9
হ্যাঁ, তবে তাঁর প্রশ্ন ছিল কখন একক বনাম ডাবল কোট ব্যবহার করবেন।
জেসন নোবেল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.