`: Key =>" মান "` এবং `কী:" মান "h হ্যাশ স্বরলিপিগুলির মধ্যে কি কোনও পার্থক্য রয়েছে?


124

:key => "value"(হ্যাশরোকট) এবং key: "value"(রুবি ১.৯) স্বরলিপিগুলির মধ্যে কি কোনও পার্থক্য রয়েছে ?

যদি তা না হয় তবে আমি key: "value"স্বরলিপি ব্যবহার করতে চাই । সেখানে একটি মণি যে আমার কাছ থেকে রূপান্তর করতে সাহায্য করে :x =>থেকে x:স্বরলিপি?

উত্তর:


153

হ্যাঁ, একটি পার্থক্য আছে। এগুলি আইনী:

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 = { 'a.b': 'c' }রুবি এখন ২.২.০-তে আইনী। দেখুন bugs.ruby-lang.org/issues/4276
বি সেভেন

@ বিভেন: ধন্যবাদ, আমি কিছুক্ষণ আগে আমার অন্যান্য বড় হ্যাশরকেটের উত্তর আপডেট করেছি তবে এটির একটিটি মিস করেছি।
মিউ খুব ছোট

h[:s] = 42উদাহরণটি কেন এই প্রশ্নের সাথে সম্পর্কিত বলে আপনি মনে করেন ? আমার মতে জাভাস্ক্রিপ্ট স্টাইল বনাম হ্যাশরকেট স্টাইল কেবল হ্যাশ কী / মান জোড় সংজ্ঞা, এবং কী দ্বারা হ্যাশ উপাদানগুলিকে সম্বোধন করতে নয় to সুতরাং h[s:] = 42উদাহরণটি বিভ্রান্তিকর বলে মনে হচ্ছে।
নিক নিলভ

@ নিকনিলোভ এটি প্রাসঙ্গিক কারণ জাভাস্ক্রিপ্ট শৈলীটি হ্যাশ কী হিসাবে প্রতীক সম্পর্কে এবং স্বীকৃত স্বরলিপিগুলি বিভ্রান্তিকরভাবে, প্রসঙ্গ নির্ভর।
মিউ

একমত হতে পারে না। প্রতীক দ্বারা একটি হ্যাশ স্লট ঠিকানা যখন আপনি সর্বদা h[:s] = 42স্বরলিপি ব্যবহার । অন্য কোন বিকল্প নেই. আপনি যখন কী / মান জোড়ার সংজ্ঞা দেন তখন আপনি { key: value }জাভাস্ক্রিপ্ট স্টাইল বা { :key => value }হ্যাশরকেট স্টাইলের বিকল্প পেয়েছেন । সম্বোধনের দৃশ্যটি এখনও ফোকাসের জন্য প্রাসঙ্গিক বলে মনে হচ্ছে না।
নিক নিলভ

11

key: "value"রুবি ১.৯ এর সুবিধার বৈশিষ্ট্য; যতক্ষণ আপনি জানেন আপনার পরিবেশ এটি সমর্থন করবে, আমি এটি ব্যবহার না করার কোনও কারণ দেখতে পাচ্ছি না। রকেটের চেয়ে কোলন টাইপ করা খুব সহজ এবং আমি মনে করি এটি দেখতে অনেক পরিষ্কার। রূপান্তরটি করার জন্য কোনও রত্ন রয়েছে, সম্ভবত তা নয়, তবে এটি আপনার জন্য একটি আদর্শ শিক্ষার অভিজ্ঞতা বলে মনে হয়, যদি আপনি ইতিমধ্যে ফাইল হেরফের এবং নিয়মিত এক্সপ্রেশন না জানেন know


5

রুবি হ্যাশ-কী হ্যাশ-রকেট দ্বারা নিয়োগ কী-মান বিদ্যমান জোড়া জন্য স্ট্রিং (সহজতর করতে উদাঃ's' => xমাধ্যমে কী নিয়োগ যেহেতু) প্রতীক ( উদাঃ key: "value" বা :key => "value") স্ট্রিং সঙ্গে নির্ধারিত করা যাবে না। যদিও হ্যাশ-রকেটগুলি হ্যাশ-টেবিলগুলির জন্য স্বাধীনতা এবং কার্যকারিতা সরবরাহ করে, বিশেষত কীগুলি হিসাবে স্ট্রিংগুলিকে অনুমতি দেয় তবে হ্যাশ-কীগুলি প্রতীক দিয়ে হ্যাশ-টেবিলগুলি তৈরি করা হলে অ্যাপ্লিকেশন কার্যকারিতা ধীর হতে পারে। নিম্নলিখিত সংস্থানগুলি হ্যাশ্রোকেট এবং চিহ্নগুলির মধ্যে যে কোনও পার্থক্য পরিষ্কার করতে সক্ষম হতে পারে:


4

দ্য key: valueতাদেরকে JSON-শৈলী বরাদ্দকরণ, নতুন রুবি 1.9 হ্যাশ সিনট্যাক্স একটি অংশ তাই মনে রাখবেন এই সিনট্যাক্স রুবি পুরোনো সংস্করণের সাথে কাজ করবে না বহন করছি। এছাড়াও, কীগুলি প্রতীক হতে চলেছে। আপনি যদি এই দুটি সীমাবদ্ধতার সাথে বেঁচে থাকতে পারেন তবে নতুন হ্যাশগুলি পুরানো হ্যাশগুলির মতোই কাজ করে; এগুলি রূপান্তর করার কোনও কারণ নেই (সম্ভবত শৈলী ব্যতীত)।


5
দ্রষ্টব্য: এটা হল না তাদেরকে JSON-শৈলী, এটা জাভাস্ক্রিপ্ট-শৈলী হয়। জেএসএন-এর উদ্ধৃতি দেওয়ার কীগুলি দরকার requires
মিউ খুব ছোট

1

করা :key => valueএকই কাজ করার মতো key: valueএবং সত্যই এটি কেবল একটি সুবিধা। আমি অন্য ভাষাগুলি ব্যবহার করে দেখিনি =>, তবে জাভাস্ক্রিপ্টের মতো অন্যরাও এটি ব্যবহার করেkey: value তাদের হ্যাশ-সমতুল্য ডেটাটাইপগুলিতে ।

আপনি যেমনভাবে আপনার হ্যাশগুলি লিখেছেন তেমন রূপান্তর করার জন্য কোনও রত্ন হিসাবে, আপনি কেবল আপনার বর্তমান প্রকল্পের জন্য এটি করছেন তার সাথে আমি আটকে থাকব।

* নোট করুন যে key: valueকীটি ব্যবহার করার সময় এটি একটি প্রতীক হবে এবং একটি fooহ্যাশের সেই কীতে সঞ্চিত মানটি অ্যাক্সেস করতে হবে foo[:key]


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