এই প্যাটার্নটি আপনাকে প্রতিটি তর্ককে অর্থবোধক নামগুলি অর্পণ করতে দেয় এবং যে কোনও আর্গুমেন্ট সরবরাহ করা হয়নি তার জন্য একটি ডিফল্ট মান সরবরাহ করে:
function FunctionName(foo, ...)
let bar = a:0 >= 1 ? a:1 : 0
let baz = a:0 >= 2 ? a:2 : 0
...
" Code that makes use of a:foo, bar and baz
যেমনটি বোরিস ব্রডস্কি নির্দেশ করেছেন:
a:0
উত্তীর্ণ alচ্ছিক আর্গুমেন্টগুলির সংখ্যা গণনা করে
a:1
, a:2
... ... আমাদের alচ্ছিক যুক্তি অ্যাক্সেস করা যাক
বাধ্যতামূলক যুক্তি (কেবল foo
উপরের উদাহরণে) গণনা করা হয় না
condition ? result_if_true : result_if_false
শর্তসাপেক্ষ (ত্রৈমাসিক) প্রকাশ যা প্রথম পদটি সত্য ছিল কি না তার উপর নির্ভর করে দ্বিতীয় বা তৃতীয় পদটির মূল্যায়ন করে।
সুতরাং যদি কোনও তৃতীয় যুক্তি সরবরাহ না করা হয়, baz
এর ডিফল্ট মানটি গ্রহণ করবে 0
।
উপরোক্ত উদাহরণে সঙ্গে এক উদ্বেগ যে a:foo
পারেন শুধুমাত্র অ্যাক্সেস করতে পারবেন a:
থাকাকালীন, প্রিফিক্স bar
এবং baz
একটি উপসর্গ ছাড়া করতে পারেন। যেহেতু এটি খুব সামঞ্জস্যপূর্ণ নয়, আপনি স্থানীয় আর্গুমেন্টগুলিতে সমস্ত আর্গুমেন্ট টানতে পছন্দ করতে পারেন:
function FunctionName(...)
let foo = a:1 " Will throw an error if no arg was provided
let bar = a:0 >= 2 ? a:2 : 0
let baz = a:0 >= 3 ? a:3 : 0
...
" Code that makes use of foo, bar and baz
(প্রযুক্তিগতভাবে, আপনি l:
কোনও ফাংশনের অভ্যন্তরে স্থানীয় ভেরিয়েবলগুলি উল্লেখ করতে উপসর্গটি ব্যবহার করতে পারেন , উদাহরণস্বরূপ l:baz
, তবে এটি অপ্রয়োজনীয় তাই আমি এটির সুপারিশ করব না))
তবে আমি আপনাকে প্রস্তাব দিচ্ছি যে যখনই সম্ভব আপনি এই ফর্মটি ব্যবহার করুন:
function! s:FunctionName(...)
!
(যেমন স্ক্রিপ্ট পুনঃলোড করে) আপনি রানটাইম আপনার ফাংশন পুনরায় সংজ্ঞায়িত করতে দেয় এবং s:
স্ক্রিপ্ট সুযোগ ফাংশন সীমিত করে। যদি আপনার ফাংশনটি কেবল স্ক্রিপ্টের অভ্যন্তরে অন্য কোথাও থেকে উল্লেখ করা হয় তবে এটি বিশ্বব্যাপী নেমস্পেসকে দূষিত করা (এবং সংঘর্ষের ঝুঁকির ঝুঁকিতে এড়ানো) এড়িয়ে চলে। যখন বিশ্বব্যাপী দৃশ্যমান হওয়ার প্রয়োজন হয় না তখন এটি সাধারণত ফাংশনগুলি সংজ্ঞায়িত করার পছন্দসই উপায়। ;-)