আমার একটি ক্লাস রয়েছে:
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 সহ)