আপনি একটি প্রোক অবজেক্ট চান:
gaussian = Proc.new do |dist, *args|
sigma = args.first || 10.0
...
end
def weightedknn(data, vec1, k = 5, weightf = gaussian)
...
weight = weightf.call(dist)
...
end
কেবলমাত্র নোট করুন যে আপনি এর মতো একটি ব্লক ঘোষণায় কোনও ডিফল্ট যুক্তি সেট করতে পারবেন না। সুতরাং আপনাকে একটি স্প্ল্যাট এবং প্র্যাক কোডে নিজেই ডিফল্ট সেটআপ করতে হবে।
অথবা, আপনার সমস্ত কিছুর উপর নির্ভর করে পরিবর্তে কোনও পদ্ধতির নামে পাস করা আরও সহজ হতে পারে।
def weightedknn(data, vec1, k = 5, weightf = :gaussian)
...
weight = self.send(weightf)
...
end
এই ক্ষেত্রে আপনি কেবল এমন একটি পদ্ধতি কল করছেন যা কোনও কোডের সম্পূর্ণ অংশে পাস করার পরিবর্তে কোনও জিনিসে সংজ্ঞায়িত। উপর নির্ভর করে আপনি কিভাবে এই তোমাদের স্থলাভিষিক্ত প্রয়োজন হতে পারে গঠন self.sendসঙ্গেobject_that_has_the_these_math_methods.send
সর্বশেষে তবে সর্বনিম্ন নয়, আপনি পদ্ধতিটি বন্ধ করে দিতে পারেন।
def weightedknn(data, vec1, k = 5)
...
weight =
if block_given?
yield(dist)
else
gaussian.call(dist)
end
end
...
end
weightedknn(foo, bar) do |dist|
# square the dist
dist * dist
end
তবে মনে হচ্ছে আপনি এখানে কোডটির পুনরায় ব্যবহারযোগ্য অংশগুলি চান।