রুবি সালে মধ্যে পার্থক্য কি {}
এবং []
?
{}
কোড ব্লক এবং হ্যাশ উভয়ের জন্যই ব্যবহার করা হবে বলে মনে হচ্ছে।
হয় []
শুধুমাত্র অ্যারে জন্য?
দলিলপত্র খুব পরিষ্কার নয়।
উত্তর:
ইহা পারিপার্শ্বিক অবস্থা উপর নির্ভর করে:
যখন তাদের নিজস্ব হয় বা কোনও ভেরিয়েবলকে বরাদ্দ করা হয় তখন []
অ্যারে তৈরি করে এবং {}
হ্যাশগুলি তৈরি করে। যেমন
a = [1,2,3] # an array
b = {1 => 2} # a hash
[]
একটি কাস্টম পদ্ধতি হিসাবে ওভাররাইড করা যেতে পারে, এবং সাধারণত হ্যাশগুলি থেকে জিনিস আনার জন্য ব্যবহৃত হয় (স্ট্যান্ডার্ড লাইব্রেরি []
হ্যাশগুলিতে একটি পদ্ধতি হিসাবে সেট করা হয় যা একই রকম fetch
)
একটি কনভেনশনও রয়েছে যে এটি একটি শ্রেণিক পদ্ধতি হিসাবে ব্যবহৃত হয় আপনি static Create
সি # বা জাভাতে কোনও পদ্ধতি ব্যবহার করতে পারেন । যেমন
a = {1 => 2} # create a hash for example
puts a[1] # same as a.fetch(1), will print 2
Hash[1,2,3,4] # this is a custom class method which creates a new hash
সেই শেষ উদাহরণের জন্য রুবি হ্যাশ ডক্স দেখুন ।
এটি সম্ভবত সবচেয়ে জটিল একটি -
{}
এটি ব্লকগুলির জন্য সিনট্যাক্স, তবে কেবল কোনও পদ্ধতিতে পাস করার সময় আর্গুমেন্ট পেরেন্সকে ছাড়িয়ে যান।
আপনি যখন প্যারেন ছাড়াই পদ্ধতিগুলি চালু করেন, তখন রুবি আপনার দৃষ্টিভঙ্গিটি কোথায় শেষ হয়েছিল তা নির্ধারণের জন্য কমাগুলি কোথায় রেখেছিলেন তা লক্ষ্য করে (যেখানে প্যারেনগুলি হ'ল আপনি যদি এটি টাইপ করেছিলেন)
1.upto(2) { puts 'hello' } # it's a block
1.upto 2 { puts 'hello' } # syntax error, ruby can't figure out where the function args end
1.upto 2, { puts 'hello' } # the comma means "argument", so ruby sees it as a hash - this won't work because puts 'hello' isn't a valid hash
:c
পাওয়া যায় নি
আরেকটি, এতটা সুস্পষ্ট নয়, ব্যবহার []
হ'ল প্রোক # কল এবং পদ্ধতি # কলটির প্রতিশব্দ হিসাবে। আপনি যখন প্রথমবারের মতো মুখোমুখি হলেন এটি কিছুটা বিভ্রান্তিকর হতে পারে। আমি অনুমান করি এর পিছনে যুক্তিযুক্ত কারণ এটি এটিকে আরও সাধারণ ফাংশন কলের মতো দেখায়।
যেমন
proc = Proc.new { |what| puts "Hello, #{what}!" }
meth = method(:print)
proc["World"]
meth["Hello",","," ", "World!", "\n"]
মোটা কথা বললে, আপনি সঠিক। পাশাপাশি হ্যাশগুলির পাশাপাশি, সাধারণ স্টাইলটি হ'ল কোঁকড়ানো ধনুর্বন্ধনীগুলি {}
প্রায়শই ব্লকগুলির জন্য ব্যবহৃত হয় যা বেশ কয়েকটি লাইন ব্যবহার করার do
/ পরিবর্তে এক লাইনে সমস্ত মানিয়ে যায় end
।
স্কয়ার ব্র্যাকেটগুলি []
স্ট্রিং, বিগনাম, দির সহ প্রচুর রুবি ক্লাসে শ্রেণি পদ্ধতি হিসাবে ব্যবহৃত হয় এবং বিভ্রান্তিকরভাবে যথেষ্ট, হ্যাশ। সুতরাং:
Hash["key" => "value"]
ঠিক তেমন বৈধ:
{ "key" => "value" }
বর্গাকার বন্ধনীগুলি [] অ্যারে আরম্ভ করার জন্য ব্যবহৃত হয়। [] প্রারম্ভকালীন মামলার ডকুমেন্টেশন রয়েছে
ri Array::[]
কোঁকড়া বন্ধনী {} হ্যাশগুলি আরম্ভ করার জন্য ব্যবহৃত হয়। Initial initial প্রারম্ভকালীন ক্ষেত্রে ডকুমেন্টেশন রয়েছে
ri Hash::[]
বর্গাকার বন্ধনীগুলি সাধারণত অ্যারে, হ্যাশ, স্ট্রিং এবং অন্যদের মতো অনেকগুলি মূল রুবি শ্রেণিতে একটি পদ্ধতি হিসাবে সাধারণত ব্যবহৃত হয়।
আপনি সমস্ত শ্রেণীর একটি তালিকা অ্যাক্সেস করতে পারেন যার সাথে পদ্ধতি "[]" সংজ্ঞায়িত হয়েছে
ri []
বেশিরভাগ পদ্ধতিতে একটি "[] =" পদ্ধতি রয়েছে যা জিনিস বরাদ্দ করতে দেয়, উদাহরণস্বরূপ:
s = "hello world"
s[2] # => 108 is ascii for e
s[2]=109 # 109 is ascii for m
s # => "hemlo world"
"... ...}" হিসাবে ব্লকগুলিতে "ডু ... শেষ" এর পরিবর্তে কোঁকড়ানো বন্ধনী ব্যবহার করা যেতে পারে b
আপনি স্কোয়ার বন্ধনী বা কোঁকড়ানো বন্ধনী দেখতে পাচ্ছেন এমন আরও একটি ক্ষেত্রে - বিশেষ আরম্ভকারীগুলিতে যেখানে কোনও চিহ্ন ব্যবহার করা যেতে পারে যেমন:
%w{ hello world } # => ["hello","world"]
%w[ hello world ] # => ["hello","world"]
%r{ hello world } # => / hello world /
%r[ hello world ] # => / hello world /
%q{ hello world } # => "hello world"
%q[ hello world ] # => "hello world"
%q| hello world | # => "hello world"
কয়েকটি উদাহরণ:
[1, 2, 3].class
# => Array
[1, 2, 3][1]
# => 2
{ 1 => 2, 3 => 4 }.class
# => Hash
{ 1 => 2, 3 => 4 }[3]
# => 4
{ 1 + 2 }.class
# SyntaxError: compile error, odd number list for Hash
lambda { 1 + 2 }.class
# => Proc
lambda { 1 + 2 }.call
# => 3
মনে রাখবেন যে আপনি []
নিজের ক্লাসের জন্য পদ্ধতিটি নির্ধারণ করতে পারেন :
class A
def [](position)
# do something
end
def @rank.[]= key, val
# define the instance[a] = b method
end
end
@rank.
?