আমার একটি ক্লাস রয়েছে:
class TestClass
def method1
end
def method2
end
def method3
end
end
আমি কিভাবে (এই ক্লাসে আমার পদ্ধতি একটি তালিকা পেতে পারেন method1, method2,method3 )?
আমার একটি ক্লাস রয়েছে:
class TestClass
def method1
end
def method2
end
def method3
end
end
আমি কিভাবে (এই ক্লাসে আমার পদ্ধতি একটি তালিকা পেতে পারেন method1, method2,method3 )?
উত্তর:
আপনি প্রকৃতপক্ষে চান TestClass.instance_methods, যদি না আপনি TestClassনিজে যা করতে পারেন তাতে আগ্রহী ।
class TestClass
def method1
end
def method2
end
def method3
end
end
TestClass.methods.grep(/method1/) # => []
TestClass.instance_methods.grep(/method1/) # => ["method1"]
TestClass.methods.grep(/new/) # => ["new"]
অথবা আপনি অবজেক্টটিতে কল করতে পারেন methods(না instance_methods):
test_object = TestClass.new
test_object.methods.grep(/method1/) # => ["method1"]
print TestClass.new.instance_methodsএই ত্রুটিটি my_class.rb:10:in <main>: undefined method instance_methods for #<TestClass:0x96b9d20> (NoMethodError)
TestClass.new.methods। সম্ভবত "এটি" আমার উত্তরে দ্বিধাগ্রস্ত ছিল।
[:method1]পরিবর্তে পেতে হবে।
TestClass.methods(false)
কেবলমাত্র সেই শ্রেণীর অন্তর্গত এমন পদ্ধতিগুলি পেতে।
TestClass.instance_methods(false)
আপনার প্রদত্ত উদাহরণ থেকে পদ্ধতিগুলি ফিরিয়ে আনবে (যেহেতু তারা টেস্টক্লাসের উদাহরণ পদ্ধতি)।
Object#methodsপদ্ধতি ফেরৎ যে আপনি পারেন কল একটি অন বস্তুর । কোন বস্তুতে আপনি কল করতে পারেন এমন কী কী পদ্ধতি রয়েছে? যেগুলি তার শ্রেণিতে সংজ্ঞায়িত হয় । যার অর্থ হল আপনি যে TestClass.methodsপদ্ধতিগুলির উপর কল করতে পারেন তার তালিকা ফিরিয়ে দেয় TestClass, এটি এমন পদ্ধতি যা এর ক্লাসে সংজ্ঞায়িত হয়। কি TestClass'র বর্গ? এটা হয় Class। সুতরাং, TestClass.methodsআপনাকে সেই পদ্ধতিগুলি দেয় যা সংজ্ঞায়িত হয় Class, সংজ্ঞায়িত হয় না TestClass। নিশ্চিত নয় যে এই উত্তরটি কীভাবে 116 টি আপত্তি পেয়েছে, যখন কেউ সম-সহ
TestClass.instance_methods
বা উত্তরাধিকারসূত্রে প্রাপ্ত সমস্ত পদ্ধতি ছাড়াই
TestClass.instance_methods - Object.methods
('টেস্টক্লাস.মোথডস - অবজেক্ট.মোথডস')
TestClass.methods(false)।
TestClass.methods(false)খালি ফিরে আসে
method1, method2অথবা method3সেই হিসেবে পদ্ধতি দৃষ্টান্ত ক্লাসের, পদ্ধতি না TestClassবস্তুর নিজেই।
$ irb --simple-prompt
class TestClass
def method1
end
def method2
end
def method3
end
end
tc_list = TestClass.instance_methods(false)
#[:method1, :method2, :method3]
puts tc_list
#method1
#method2
#method3
রুবি ডক উদাহরণ অনুসারে_মোথডস
রিসিভারে সর্বজনীন এবং সুরক্ষিত উদাহরণ পদ্ধতিগুলির নাম সম্বলিত একটি অ্যারে প্রদান করে। মডিউলটির জন্য, এগুলি সর্বজনীন এবং সুরক্ষিত পদ্ধতি; একটি শ্রেণীর জন্য, তারা উদাহরণ (সিঙ্গলটন নয়) পদ্ধতি। Alচ্ছিক প্যারামিটারটি মিথ্যা হলে কোনও পূর্বপুরুষের পদ্ধতিগুলি অন্তর্ভুক্ত নয়। আমি অফিসিয়াল ডকুমেন্টেশন উদাহরণ নিচ্ছি।
module A
def method1()
puts "method1 say hi"
end
end
class B
include A #mixin
def method2()
puts "method2 say hi"
end
end
class C < B #inheritance
def method3()
puts "method3 say hi"
end
end
আউটপুট দেখুন।
A.instance_methods(false)
=> [:method1]
A.instance_methods
=> [:method1]
B.instance_methods
=> [:method2, :method1, :nil?, :===, ...# ] # methods inherited from parent class, most important :method1 is also visible because we mix module A in class B
B.instance_methods(false)
=> [:method2]
C.instance_methods
=> [:method3, :method2, :method1, :nil?, :===, ...#] # same as above
C.instance_methods(false)
=> [:method3]
শুধুমাত্র নিজস্ব পদ্ধতিগুলি পেতে এবং উত্তরাধিকারসূত্রে বাদ দেওয়া:
উদাহরণের মধ্যে থেকে:
self.methods - self.class.superclass.instance_methods
বাইরে থেকে:
TestClass.instance_methods - TestClass.superclass.instance_methods
এটি ক্লাসে যুক্ত করুন:
class TestClass
class << self
def own_methods
self.instance_methods - self.superclass.instance_methods
end
end
end
TestClass.own_methods
=> [:method1, :method2, :method3]
(রুবি ২.6.x সহ)