রুবি প্রেরণ পদ্ধতি একাধিক পরামিতি পাস করে


129

দ্বারা গতিশীলভাবে অবজেক্টস এবং কল পদ্ধতিগুলি তৈরি করার চেষ্টা করা

Object.const_get(class_name).new.send(method_name,parameters_array)

যা ভাল কাজ করছে যখন

Object.const_get(RandomClass).new.send(i_take_arguments,[10.0])

তবে 2 টির জন্য 1 টির পক্ষে ভুল সংখ্যার যুক্তি ছুঁড়ে দেওয়া

Object.const_get(RandomClass).new.send(i_take_multiple_arguments,[25.0,26.0])

র্যান্ডম ক্লাস সংজ্ঞায়িত হয়

class RandomClass
def i_am_method_one
    puts "I am method 1"
end
def i_take_arguments(a)
    puts "the argument passed is #{a}"
end
def i_take_multiple_arguments(b,c)
    puts "the arguments passed are #{b} and #{c}"
end
    end

কেউ কীভাবে আমাকে রুবি পদ্ধতিতে একাধিক পরামিতি প্রেরণ করতে সহায়তা করতে পারে

উত্তর:



8

আপনি পর্যায়ক্রমে sendএর সমার্থক নাম্বারে কল করতে পারেন __send__:

r = RandomClass.new
r.__send__(:i_take_multiple_arguments, 'a_param', 'b_param')

উপায় দ্বারা * আপনি পার্সস কমা হিসাবে পৃথক পৃথক হিসাবে hashes পাস করতে পারেন:

imaginary_object.__send__(:find, :city => "city100")

বা নতুন হ্যাশ সিনট্যাক্স:

imaginary_object.__send__(:find, city: "city100", loc: [-76, 39])

ব্ল্যাকের মতে, __send__নেমস্পেসে নিরাপদ।

“প্রেরণ একটি বিস্তৃত ধারণা: ইমেল প্রেরণ করা হয়, ডেটা I / O সকেটে প্রেরণ করা হয় এবং আরও অনেক কিছু। প্রোগ্রামগুলির পক্ষে সেন্ড নামক একটি পদ্ধতি সংজ্ঞায়িত করা অস্বাভাবিক কিছু নয় যা রুবির অন্তর্নির্মিত প্রেরণ পদ্ধতির সাথে বিরোধ করে send অতএব, রুবি আপনি কল শুরু করুন বিকল্প পথ দেয়: __send__। কনভেনশন অনুসারে, কেউ কখনই সেই নামের সাথে কোনও পদ্ধতি লেখেন না, তাই অন্তর্নির্মিত রুবি সংস্করণ সর্বদা উপলভ্য এবং নতুন লিখিত পদ্ধতিগুলির সাথে কখনও বিরোধে আসে না। এটি দেখতে অদ্ভুত লাগছে, তবে পদ্ধতি-নাম সংঘর্ষের দৃষ্টিকোণ থেকে এটি সরল প্রেরণ সংস্করণের চেয়ে নিরাপদ ”

ব্ল্যাক এছাড়াও মোড়ানো কল প্রস্তাব দেওয়া __send__মধ্যে if respond_to?(method_name)

if r.respond_to?(method_name)
    puts r.__send__(method_name)
else
    puts "#{r.to_s} doesn't respond to #{method_name}"
end

রেফ: কালো, ডেভিড এ। ম্যানিং, ২০০৯. পি .১71১১।

* আমি এখানে হ্যাশ সিনট্যাক্স সন্ধান করতে এসেছি __send__, সুতরাং অন্যান্য গুগলারের পক্ষে এটি কার্যকর হতে পারে। ;)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.