दिलचस्प पोस्ट
सिस्टम टाइमज़ोन सेटिंग कैसे प्राप्त करें और इसे pytz.timezone पास करें? किसी वेबपेज पर एम्बेडेड ऑब्जेक्ट के लिए wmode = "transparent", "opaque", या "window" के बीच अंतर मैं एक्सेस में एक पूर्ण बाहरी जॉब क्वेरी कैसे लिखूं? सी में प्रतिबिंब समर्थन जावा में फ़ाइल संचालन को स्थानांतरित / कॉपी करें Windows कमांड-लाइन वातावरण का उपयोग करके आप किसी फ़ाइल में पाठ को कैसे ढूंढ सकते हैं और बदल सकते हैं? json प्रतिक्रिया के साथ jQuery के AJAX अनुरोध, कैसे? एंड्रॉइड किटकैट में अपना एसएमएस ऐप डिफ़ॉल्ट कैसे सेट करें? अभिविन्यास मेटाडेटा के आधार पर जेपीईजी छवियों को कैसे घुमाएंगे? सी # में, "यह" कीवर्ड आवश्यक है? मैं कैसे एक पार्श्व धागा फ्लास्क जोड़ सकते हैं? मैं फ़ायरफ़ॉक्स और ओपेरा में एक HTML तत्व कैसे ज़ूम कर सकता हूं? क्या "वापसी झूठी" क्या करता है? क्यों स्विच मॉड्यूल पर्ल में पदावनत है? Facebook API का उपयोग करके स्थान और ईमेल प्राप्त नहीं कर सकते

रूबी के तरीकों में `फू 'के बजाय` self.foo` का उपयोग करने के लिए

यह रेल के लिए विशिष्ट नहीं है – मैं सिर्फ उदाहरण के रूप में रेल का प्रयोग कर रहा हूं।

मेरे पास रेल में एक मॉडल है:

class Item < ActiveRecord::Base def hello puts "Hello, #{self.name}" end end 

(मान लीजिए कि Item मॉडल (कक्षा) में name की एक विधि है)। मुझे self.name name का उपयोग करने की आवश्यकता self.name और कब मैं सिर्फ name उपयोग कर सकता हूं? (उदाहरण #{name} )

Solutions Collecting From Web of "रूबी के तरीकों में `फू 'के बजाय` self.foo` का उपयोग करने के लिए"

  1. self. छोड़ना पसंद करना मुहावरेदार है self. तरीकों को लागू करते समय; आम तौर पर यह कभी ज़रूरत नहीं होती है

  2. आपको foo = xxx बजाय एक सेटर विधि को बुलाते समय self.foo = xxx उपयोग करना चाहिए , ताकि रूबी को पता चल जाए कि आप एक नया स्थानीय चर बनाने की कोशिश नहीं कर रहे हैं।

    • इसी प्रकार, आपके पास एक मौजूदा स्थानीय चर वाली विधि है जो एक ही नाम के साथ एक विधि के रूप में करता है, आपको विधि का उपयोग करने के लिए self.do_something का उपयोग करना चाहिए। जैसे कि do_something को चर पढ़ने को समाप्त हो जाएगा।
  3. आप एक निजी विधि कॉल करने के लिए self.foo(...) का उपयोग नहीं कर सकते हैं ; आपको इसके बजाय केवल foo(...) कॉल करना होगा

यदि आप self रूके हैं तो पहले उस नाम के साथ स्थानीय चर की तलाश करेंगे, फिर एक उदाहरण विधि के लिए यह self. लिखने के लिए मुहावरेदार नहीं है । किसी भी मामले में, आपको असाइनमेंट पर self.something = value लिखना self.something = value

ध्यान दें कि निजी विधियों को फोन करते समय आप self उपयोग नहीं कर सकते (सुरक्षित तरीके से कोई समस्या नहीं):

 class A def foo; self.bar; end private def bar; "bar"; end end A.new.foo # private method `bar' called for #<A:0x7f49193584f0> (NoMethodError) 

इस ट्यूटोरियल के बाद, आपको स्वयं पॉइंटर का उपयोग करने की आवश्यकता नहीं है लेकिन मुझे लगता है कि इस (या हमारे मामले में स्वयं ) संकेतक का उपयोग नाम के संघर्ष को हल करने के लिए किया जाता है। दरअसल, @name और self.name समान बयान हैं (यदि आपके वर्ग के लिए कोई name विधि नहीं है)। उदाहरण के लिए:

 class Moo attr_accessor :name def moo(name) name = name # O_o which *name* should i use? end def foo(name) @name = name # the same as *self.name = name* end def hello puts self.name # the same as *puts @name* end end a = Moo.new a.hello() # should give no output a.moo('zaooza') a.hello() # Hey! Why does it prints nothing? a.foo('zaooza') a.hello() # whoa! This one shows 'zaooza'! 

इस कोड को चलाने का प्रयास करें और आप देखेंगे =)