উত্তর:
হ্যাঁ, একটি পার্থক্য আছে। এগুলি আইনী:
h = { :$in => array }
h = { :'a.b' => 'c' }
h[:s] = 42
তবে এগুলি নয়:
h = { $in: array }
h = { 'a.b': 'c' } # but this is okay in Ruby2.2+
h[s:] = 42
আপনি কী হিসাবে কিছু ব্যবহার =>
করতে পারেন যাতে আপনি এটি করতে পারেন:
h = { C.new => 11 }
h = { 23 => 'pancakes house?' }
তবে আপনি এটি করতে পারবেন না:
h = { C.new: 11 }
h = { 23: 'pancakes house?' }
জাভাস্ক্রিপ্ট স্টাইল ( key: value
) কেবল তখনই কার্যকর যখন আপনার সমস্ত হ্যাশ কীগুলি "সরল" প্রতীক হয় (কমবেশি কিছু মেলে যা /\A[a-z_]\w*\z/i
, AFAIK এই কীগুলির জন্য তার লেবেল নিদর্শন ব্যবহার করে)।
:$in
যখন MongoDB ব্যবহার যাতে আপনি হ্যাশ শৈলী মিশ আপনি MongoDB ব্যবহার শেষ করব শৈলী প্রতীক একটি ন্যায্য বিট দেখাবে। এবং, যদি আপনি h[:k]
কেবল পুরো হ্যাশগুলি ( h = { ... }
) এর পরিবর্তে হ্যাশগুলির নির্দিষ্ট কীগুলি ( ) ব্যবহার করে থাকেন তবে আপনাকে এখনও চিহ্নগুলির জন্য কোলন-প্রথম শৈলী ব্যবহার করতে হবে; আপনি হ্যাশগুলির বাইরে যে চিহ্নগুলি ব্যবহার করেন সেগুলির জন্য আপনাকে নেতৃস্থানীয়-কোলন স্টাইলও ব্যবহার করতে হবে। আমি সামঞ্জস্য থাকতে পছন্দ করি তাই আমি জাভাস্ক্রিপ্ট স্টাইলটি মোটেও বিরক্ত করি না।
জাভাস্ক্রিপ্ট-স্টাইলের কিছু সমস্যা রুবি ২.২ এ স্থির করা হয়েছে। আপনি এখন উদ্ধৃতি ব্যবহার করতে পারেন যদি আপনার কাছে এমন চিহ্ন রয়েছে যা বৈধ লেবেল নয়, উদাহরণস্বরূপ:
h = { 'where is': 'pancakes house?', '$set': { a: 11 } }
আপনার কীগুলি প্রতীক না হলে আপনার এখনও হ্যাশরকেটের প্রয়োজন।
h[:s] = 42
উদাহরণটি কেন এই প্রশ্নের সাথে সম্পর্কিত বলে আপনি মনে করেন ? আমার মতে জাভাস্ক্রিপ্ট স্টাইল বনাম হ্যাশরকেট স্টাইল কেবল হ্যাশ কী / মান জোড় সংজ্ঞা, এবং কী দ্বারা হ্যাশ উপাদানগুলিকে সম্বোধন করতে নয় to সুতরাং h[s:] = 42
উদাহরণটি বিভ্রান্তিকর বলে মনে হচ্ছে।
h[:s] = 42
স্বরলিপি ব্যবহার । অন্য কোন বিকল্প নেই. আপনি যখন কী / মান জোড়ার সংজ্ঞা দেন তখন আপনি { key: value }
জাভাস্ক্রিপ্ট স্টাইল বা { :key => value }
হ্যাশরকেট স্টাইলের বিকল্প পেয়েছেন । সম্বোধনের দৃশ্যটি এখনও ফোকাসের জন্য প্রাসঙ্গিক বলে মনে হচ্ছে না।
key: "value"
রুবি ১.৯ এর সুবিধার বৈশিষ্ট্য; যতক্ষণ আপনি জানেন আপনার পরিবেশ এটি সমর্থন করবে, আমি এটি ব্যবহার না করার কোনও কারণ দেখতে পাচ্ছি না। রকেটের চেয়ে কোলন টাইপ করা খুব সহজ এবং আমি মনে করি এটি দেখতে অনেক পরিষ্কার। রূপান্তরটি করার জন্য কোনও রত্ন রয়েছে, সম্ভবত তা নয়, তবে এটি আপনার জন্য একটি আদর্শ শিক্ষার অভিজ্ঞতা বলে মনে হয়, যদি আপনি ইতিমধ্যে ফাইল হেরফের এবং নিয়মিত এক্সপ্রেশন না জানেন know
রুবি হ্যাশ-কী হ্যাশ-রকেট দ্বারা নিয়োগ কী-মান বিদ্যমান জোড়া জন্য স্ট্রিং (সহজতর করতে উদাঃ । 's' => x
মাধ্যমে কী নিয়োগ যেহেতু) প্রতীক ( উদাঃ key: "value"
বা :key => "value"
) স্ট্রিং সঙ্গে নির্ধারিত করা যাবে না। যদিও হ্যাশ-রকেটগুলি হ্যাশ-টেবিলগুলির জন্য স্বাধীনতা এবং কার্যকারিতা সরবরাহ করে, বিশেষত কীগুলি হিসাবে স্ট্রিংগুলিকে অনুমতি দেয় তবে হ্যাশ-কীগুলি প্রতীক দিয়ে হ্যাশ-টেবিলগুলি তৈরি করা হলে অ্যাপ্লিকেশন কার্যকারিতা ধীর হতে পারে। নিম্নলিখিত সংস্থানগুলি হ্যাশ্রোকেট এবং চিহ্নগুলির মধ্যে যে কোনও পার্থক্য পরিষ্কার করতে সক্ষম হতে পারে:
দ্য key: value
তাদেরকে JSON-শৈলী বরাদ্দকরণ, নতুন রুবি 1.9 হ্যাশ সিনট্যাক্স একটি অংশ তাই মনে রাখবেন এই সিনট্যাক্স রুবি পুরোনো সংস্করণের সাথে কাজ করবে না বহন করছি। এছাড়াও, কীগুলি প্রতীক হতে চলেছে। আপনি যদি এই দুটি সীমাবদ্ধতার সাথে বেঁচে থাকতে পারেন তবে নতুন হ্যাশগুলি পুরানো হ্যাশগুলির মতোই কাজ করে; এগুলি রূপান্তর করার কোনও কারণ নেই (সম্ভবত শৈলী ব্যতীত)।
করা :key => value
একই কাজ করার মতো key: value
এবং সত্যই এটি কেবল একটি সুবিধা। আমি অন্য ভাষাগুলি ব্যবহার করে দেখিনি =>
, তবে জাভাস্ক্রিপ্টের মতো অন্যরাও এটি ব্যবহার করেkey: value
তাদের হ্যাশ-সমতুল্য ডেটাটাইপগুলিতে ।
আপনি যেমনভাবে আপনার হ্যাশগুলি লিখেছেন তেমন রূপান্তর করার জন্য কোনও রত্ন হিসাবে, আপনি কেবল আপনার বর্তমান প্রকল্পের জন্য এটি করছেন তার সাথে আমি আটকে থাকব।
* নোট করুন যে key: value
কীটি ব্যবহার করার সময় এটি একটি প্রতীক হবে এবং একটি foo
হ্যাশের সেই কীতে সঞ্চিত মানটি অ্যাক্সেস করতে হবে foo[:key]
।
=>
। আমি অনুমান করতে পারি যে পার্ল ভারীভাবে অনুপ্রাণিত হয়ে পার্ল থেকে সিনট্যাক্স ধার করেছিলেন :)
h = { 'a.b': 'c' }
রুবি এখন ২.২.০-তে আইনী। দেখুন bugs.ruby-lang.org/issues/4276