ডিফল্ট রাকু কেন / যখন / লুপ / ​​যখন ব্লকগুলির সকলের পরিচয় মান একই থাকে (.WHICH)?


9

যেখানে আমি স্বাক্ষর ঘোষণা করেছি সেই ব্লক ব্যতীত, সমস্ত ব্লকের একই পরিচয় মূল্য রয়েছে এবং যেখানেই তা ঘটুক না কেন 1 লাইনে ঘোষিত হওয়ার দাবি করুন। কেউ কেন এই ঘটনাটি সম্পর্কে কিছুটা আলোকপাত করতে পারে?

say 「Let's look at some blocks…」;

if True {
  &?BLOCK.say;
}

while True {
  &?BLOCK.say;
  last;
}

loop {
  &?BLOCK.say;
  last;
}

if True -> | {
  「I'm different!」.say;
  &?BLOCK.say;
}

when ?True {
  &?BLOCK.say;
}

উত্তর:


6

প্রথমত: আপনাকে পরিচয় মান .sayদেয় না , কারণ .gistএটি প্রদত্ত অভিব্যক্তিতে পদ্ধতিটিকে কল করে । পরিচয় মানের জন্য, আপনাকে .WHICHপদ্ধতিটি কল করতে হবে । ভাগ্যক্রমে, Block.gistপদ্ধতিটি করে তার stringification পরিচয় মান অন্তর্ভুক্ত। কিন্তু যে হয় না সমস্ত বস্তু কেনার ক্ষেত্রে দেখা হতে নিশ্চিত।

আপনি সেখানে যা দেখছেন তা হ'ল কর্মক্ষেত্রে স্থিতিশীল অপ্টিমাইজার: কারণ ব্লকের ভিতরে কিছুই হচ্ছে না, এটি ফেলে দেওয়া যেতে পারে। এটি একর ক্ষেত্রে যেখানে পৃথক (যেখানে আপনি বিকল্প স্বাক্ষর নির্দিষ্ট করেছেন), এটি আলাদা is আপনি যদি এই স্ক্রিপ্টটি চালনা করেন --optimize=0বা --optimize=1তারপর, সমস্ত ব্লক হবে বিভিন্ন পরিচয় মান আছে।

আমার ধারণা আপনি উল্লেখ করতে পারেন যে এটি একটি সমস্যা বলতে পারেন &?BLOCK স্ট্যাটিক অপ্টিমাইজারের সুযোগকে প্রশমিত করতে বাধা দেয় না। অন্যদিকে, আপনি এটিকে ডিআইএইচডাব্লুডিটির কেসও বলতে পারেন (ডক্টর, ইট হুর্টস উইন আই আই ডু)। সুতরাং যে তারপর করবেন না :-)

আপডেট: এটি ভিন্ন স্বাক্ষর যা পার্থক্য করেছে। ড্যানিয়েল মিতা ++


2
তথ্যের জন্য ধন্যবাদ, যদিও আমি নিশ্চিত না যে আমি ২ য় অনুচ্ছেদে অনুসরণ করছি। স্ট্রিং তৈরির ফলে কোনও পার্থক্য আসে না, এটি যে ব্লকের স্বাক্ষর তা হ'ল (আমি স্বাক্ষর অপসারণ করি তবে স্ট্রিংটি রাখি তবে এটির একই পরিচয় মূল্য রয়েছে)।
ড্যানিয়েল মিতা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.