কোনও বন্ধ কখন Fn, FnMut এবং FnOnce প্রয়োগ করে?


114

কি কি নির্দিষ্ট অবস্থার একটি অবসান বাস্তবায়ন জন্য Fn, FnMutএবং FnOnceবৈশিষ্ট্যগুলো?

এটাই:

  • যখন কোনও বন্ধন বৈশিষ্ট্যটি কার্যকর করে নাFnOnce ?
  • যখন কোনও বন্ধন বৈশিষ্ট্যটি কার্যকর করে নাFnMut ?
  • যখন কোনও বন্ধন বৈশিষ্ট্যটি কার্যকর করে নাFn ?

উদাহরণস্বরূপ, এটির শরীরে বন্ধের স্থিতি পরিবর্তন করে সংকলকটি এটি প্রয়োগ Fnকরে না।


11
বন্ধের বিষয়ে আপনি কি এই সাম্প্রতিক দুর্দান্ত নিবন্ধটি দেখেছেন ?
শেপমাস্টার

উত্তর:


126

বৈশিষ্ট্যগুলি প্রতিটি ক্লোজার / ফাংশনগুলি সম্পর্কে নিয়ন্ত্রিত বৈশিষ্ট্যগুলি উপস্থাপন করে যা তাদের call_...পদ্ধতির স্বাক্ষর দ্বারা এবং বিশেষত self: প্রকারের দ্বারা নির্দেশিত হয় :

  • FnOnce( self) ফাংশন যা একবার বলা যেতে পারে be
  • FnMut( &mut self) হ'ল ফাংশন যা &mutতাদের পরিবেশে অ্যাক্সেস থাকলে কল করা যেতে পারে
  • Fn( &self) হ'ল ফাংশন যা &তাদের পরিবেশে কেবল অ্যাক্সেস থাকলে তা বলা যেতে পারে

একটি ক্লোজার |...| ...স্বয়ংক্রিয়ভাবে এটি যতটা সম্ভব প্রয়োগ করবে।

  • সমস্ত FnOnceবন্ধকরণ বাস্তবায়ন করে : এমন এক ক্লোজার যা একবার কল করা যায় না সে নামের প্রাপ্য নয়। মনে রাখবেন যে কোনও বন্ধ যদি কেবলমাত্র প্রয়োগ করে FnOnce, তবে এটি কেবল একবার কল করা যেতে পারে।
  • যে ক্যাপচারগুলি তাদের ক্যাপচারগুলি থেকে সরে যায় না তা কার্যকর হয় FnMut, তাদের একাধিকবার কল করার অনুমতি দেয় (যদি ফাংশন অবজেক্টে অকার্যকর অ্যাক্সেস থাকে)।
  • যে ক্যাপচারগুলি তাদের ক্যাপচারগুলিতে বাস্তবের জন্য অনন্য / পার্সোনাল অ্যাক্সেসের প্রয়োজন হয় না Fn, তাদেরকে সর্বত্র মূলত ডেকে আনা যায়।

এই বিধিনিষেধগুলি selfস্ট্রোকসে ক্লোজারগুলির ধরণ এবং "ডিজুয়ারিং" থেকে সরাসরি অনুসরণ করে ; জং ইন ক্লোজার সন্ধান আমার ব্লগ পোস্টে বর্ণিত ।

বন্ধ উপর তথ্যের জন্য, দেখুন বেনামী কার্যাবলী যে তাদের পরিবেশের ক্যাপচার করতে পারে না: বন্ধ মধ্যে মরচে প্রোগ্রামিং ভাষা


যদি কোনও ক্লোজার কেবল প্রয়োগ FnOnceকরে তবে এর অর্থ কি এটি একবারে ডাকা যেতে পারে?
17:30

নেপালি, হ্যাঁ, কেবল একবার
হুন

9
আমি নালীর মন্তব্য ভুলভাবে পড়েছি এবং এটি আমার কিছু বিভ্রান্তির কারণ হয়েছে। ভবিষ্যতের পাঠকগণ, দয়া করে নোট করুন যে তিনি বলেছিলেন "যদি একটি ক্লোজার কেবলমাত্র প্রয়োগ করে FnOnce"।
ঘুমন্ত

2
বাস্তবায়ন বিশদ: এটি যতটা সম্ভব স্বয়ংক্রিয়ভাবে প্রয়োগ করবে। সম্পূর্ণরূপে সত্য নয়, এটি প্রয়োজন মনে হলে এটি স্বয়ংক্রিয়ভাবে প্রয়োগ করবে। বিশেষায়নের সাহায্যে কোনও FnMut আর্গুমেন্টের জন্য ব্যবহৃত একটি বন্ধের জন্য আপনি অনুপস্থিত Fn-impl সনাক্ত করতে পারেন। এটি বাগ github.com/rust-lang/rust/issues/26085
bluss
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.