আমি ভুল হতে পারি যেহেতু কেউ এটি উল্লেখ করেনি, তবে আমি এই ধারণার মধ্যেও ছিলাম যে এর কারণটিও বন্ধনী ছাড়াই ফাংশনগুলি কল করতে সক্ষম হওয়ার রুবি yতিহ্য।
কৌতূহল স্পষ্টত জড়িত তবে এটি কিছুক্ষণের জন্য আলাদা করে রাখুন এবং তর্ক ছাড়াই ফাংশনগুলি ব্যবহার করুন। জাভাস্ক্রিপ্টের মতো ভাষায় যেখানে বন্ধনী বাধ্যতামূলক, সেখানে কোনও ফাংশনটিকে আর্গুমেন্ট হিসাবে পাস করা এবং ফাংশনটি কল করার মধ্যে পার্থক্য করা সহজ। আপনি যখন বন্ধনী ব্যবহার করবেন তখনই আপনি এটি কল করবেন।
my_function // argument
(function() {}) // argument
my_function() // function is called
(function() {})() // function is called
আপনি দেখতে পাচ্ছেন, নামকরণ করা বা না করা বড় পার্থক্য রাখে না। তবে এলিক্সার এবং রুবি আপনাকে বন্ধনী ছাড়াই ফাংশনগুলিতে কল করতে দেয়। এটি একটি নকশার পছন্দ যা আমি ব্যক্তিগতভাবে পছন্দ করি তবে এর এই পার্শ্ব প্রতিক্রিয়াটি রয়েছে আপনি বন্ধনী ছাড়া কেবল নাম ব্যবহার করতে পারবেন না কারণ এর অর্থ হতে পারে আপনি ফাংশনটি কল করতে চান। এই কি &
জন্য হয়। আপনি যদি দ্বিতীয়টির জন্য আর্টিটি অ্যাপার্টটি ছেড়ে যান, তবে আপনার ফাংশনটির নাম প্রেরণের &
অর্থ আপনি এই ফাংশনটি স্পষ্টভাবে যুক্তি হিসাবে ব্যবহার করতে চান, এই ফাংশনটি কী দেয় তা নয়।
এখন বেনামে ফাংশনটি কিছুটা আলাদা যে এটি মূলত একটি যুক্তি হিসাবে ব্যবহৃত হয়। আবার এটি একটি ডিজাইনের পছন্দ তবে এর পিছনে যুক্তিযুক্ত বিষয়টি এটি প্রধানত পুনরাবৃত্তিকারীদের দ্বারা ব্যবহৃত হয় ফাংশনগুলির ধরণের যা আর্গুমেন্ট হিসাবে ফাংশন গ্রহণ করে। সুতরাং স্পষ্টতই আপনার ব্যবহারের দরকার নেই &
কারণ এগুলি ইতিমধ্যে ডিফল্ট হিসাবে আর্গুমেন্ট হিসাবে বিবেচিত হয়। এটা তাদের উদ্দেশ্য।
এখন শেষ সমস্যাটি হ'ল কখনও কখনও আপনাকে তাদের কোডে কল করতে হয়, কারণ এগুলি সর্বদা একটি পুনরায় আইট্রেটর জাতীয় ধরণের ফাংশনের সাথে ব্যবহার করা হয় না বা আপনি নিজেই কোনও পুনরুক্তি কোডিং করতে পারেন। ছোট গল্পের জন্য, যেহেতু রুবি অবজেক্ট ওরিয়েন্টেড তাই এটি করার প্রধান উপায় ছিল call
অবজেক্টে থাকা পদ্ধতিটি ব্যবহার করা । এইভাবে, আপনি অ-বাধ্যতামূলক বন্ধনী আচরণকে সামঞ্জস্য রাখতে পারেন।
my_lambda.call
my_lambda.call()
my_lambda_with_arguments.call :h2g2, 42
my_lambda_with_arguments.call(:h2g2, 42)
এখন কেউ শর্টকাট নিয়ে এসেছিল যা মূলত কোনও নামবিহীন একটি পদ্ধতির মতো দেখায়।
my_lambda.()
my_lambda_with_arguments.(:h2g2, 42)
আবার, এটি একটি নকশা পছন্দ। এখন অমৃত বস্তু ভিত্তিক নয় এবং তাই নিশ্চিত হয়ে প্রথম ফর্মটি ব্যবহার করবেন না। আমি জোসের পক্ষে কথা বলতে পারছি না তবে মনে হচ্ছে দ্বিতীয় রূপটি এলিক্সারে ব্যবহৃত হয়েছিল কারণ এটি এখনও অতিরিক্ত চরিত্রের সাথে ফাংশন কল হিসাবে দেখায়। এটি একটি ফাংশন কলের যথেষ্ট কাছে।
আমি সমস্ত উপকারিতা এবং কনস সম্পর্কে চিন্তা করি নি, তবে উভয় ভাষায় দেখে মনে হচ্ছে আপনি বেনামগুলি বেনামে বাধ্যতামূলক করার জন্য যতক্ষণ না বন্ধনী বাধ্যতামূলক করেন ততক্ষণ আপনি কেবল বন্ধনীগুলি দিয়ে পালিয়ে যেতে পারেন। দেখে মনে হচ্ছে এটি:
বাধ্যতামূলক বন্ধনীগুলি ভিএস কিছুটা আলাদা স্বরলিপি
উভয় ক্ষেত্রেই আপনি ব্যতিক্রম করেন কারণ আপনি উভয়ই আলাদা আচরণ করেন। যেহেতু একটি পার্থক্য রয়েছে, আপনি সম্ভবত এটি সুস্পষ্ট করে তুলতে পারেন এবং আলাদা স্বীকৃতি পেতে পারেন। বাধ্যতামূলক বন্ধনীগুলি বেশিরভাগ ক্ষেত্রে প্রাকৃতিক দেখায় তবে খুব বিভ্রান্ত হয় যখন জিনিসগুলি পরিকল্পনা অনুযায়ী না হয়।
আপনি এখানে যান। এখন এটি বিশ্বের সেরা ব্যাখ্যা নাও হতে পারে কারণ আমি বেশিরভাগ বিশদই সরল করে দিয়েছি। এছাড়াও এর বেশিরভাগটি ডিজাইনের পছন্দ এবং আমি তাদের বিচার না করেই কারণ দেওয়ার চেষ্টা করেছি। আমি অমৃতকে ভালবাসি, আমি রুবিকে ভালবাসি, আমি বন্ধনী ছাড়াই ফাংশন কল করতে পছন্দ করি তবে আপনার মতো, আমি পরিণতিগুলি একবারে একবারে বেশ ভ্রান্ত দেখি।
এবং এলিক্সিতে এটি কেবল এই অতিরিক্ত বিন্দু, তবে রুবিতে আপনার উপরে ব্লক রয়েছে। ব্লকগুলি আশ্চর্যজনক এবং আমি অবাক হয়েছি যে আপনি কেবল ব্লকগুলি দিয়ে কী করতে পারেন তবে তারা কেবল তখনই কাজ করে যখন আপনার কেবলমাত্র একটি বেনাম ফাংশন প্রয়োজন যা শেষ যুক্তি। তারপরে আপনার যেহেতু অন্যান্য পরিস্থিতিগুলি মোকাবেলা করতে সক্ষম হওয়া উচিত, তাই পুরো পদ্ধতিটি / ল্যাম্বদা / প্রোক / ব্লক বিভ্রান্তি এখানে আসে।
যাইহোক ... এটি সুযোগের বাইরে।