मुझे यकीन है कि यह उन लोगों के लिए एक मूर्ख सवाल है जो जानते हैं, लेकिन मुझे यह नहीं पता कि यह क्या करता है या यह क्या है।रुबी में "पी" क्या है?
CSV.open('data.csv', 'r') do |row|
p row
end
"p row
" क्या करता है?
मुझे यकीन है कि यह उन लोगों के लिए एक मूर्ख सवाल है जो जानते हैं, लेकिन मुझे यह नहीं पता कि यह क्या करता है या यह क्या है।रुबी में "पी" क्या है?
CSV.open('data.csv', 'r') do |row|
p row
end
"p row
" क्या करता है?
p()
एक कर्नेल विधियह मानक आउटपुट में obj.inspect
लिखते है।
क्योंकि ऑब्जेक्ट कर्नेल मॉड्यूल में मिश्रित होता है, p()
विधि हर जगह उपलब्ध है।
यह सामान्य है, बीटीडब्ल्यू, कविता मोड में इसका उपयोग करने के लिए, जिसका अर्थ है कि माता-पिता गिराए गए हैं। सीएसवी स्निपेट की तरह लिखा जा सकता है ...
CSV.open 'data.csv', 'r' do |row|
p row
end
यह here with the rest of the Kernel मॉड्यूल दस्तावेज है।
Kernel#p
Kernel#puts
के छोटे डिबगिंग भाई है: यह कम या ज्यादा काम करता है वास्तव में यह पसंद है, लेकिन यह #to_s
के बजाय #inspect
का उपयोग कर अपने तर्कों बदल देता है।
इसका एक गुप्त रहस्य क्यों है इसका कारण यह है कि आप इसे तुरंत अभिव्यक्ति में फेंक सकते हैं और डीबगिंग करते समय इसे फिर से निकाल सकते हैं। (मुझे लगता है कि यह बहुत कम उपयोगी है कि अब रूबी बेहतर और बेहतर "उचित" डिबगिंग समर्थन मिल रहा है।)
Kernel#p
करने के लिए कुछ विकल्प हैं Kernel#pp
pp
मानक पुस्तकालय और Kernel#y
(YAML) से (सुंदर प्रिंट) yaml
से मानक पुस्तकालय
आपके सिस्टम पर पहले से मौजूद दस्तावेज़ों के लिए दूसरा विकल्प ri
कमांड है। किसी भी समय आप टाइप कर सकते हैं: ri p
या यदि p
को केंद्रीय आदेशों के लिए कई स्थानों (जो यह है) में परिभाषित किया गया है तो आप ri Kernel.p
आज़मा सकते हैं। अन्य अच्छे दांव Array.<whatever method>
या String.<whatever method>
हैं।
यदि आप रत्नों का एक समूह स्थापित करना समाप्त करते हैं तो यह बहुत धीमा हो जाएगा लेकिन आप फास्ट्री मणि देख सकते हैं जो लुकअप प्रक्रिया को अविश्वसनीय रूप से गति देता है।
कर्नेल # पी प्रिंट और रखरखाव से कम ज्ञात है।
यह कहता है कि यह एक नई लाइन जोड़ता है, लेकिन to_s को कॉल करने के बजाय, पी कॉल का निरीक्षण करता है।
संदर्भ
http://garethrees.co.uk/2013/05/04/p-vs-puts-vs-print-in-ruby/
पी और पुट के बीच अंतर समझने के लिए, आप() उदाहरण to_s के बीच का अंतर और() पद्धतियों को समझना चाहिए।
to_s का उपयोग ऑब्जेक्ट की स्ट्रिंग प्रस्तुति प्राप्त करने के लिए किया जाता है जबकि instance टू_एस का एक और डेवलपर अनुकूल संस्करण है जो ऑब्जेक्ट्स की सामग्री भी देता है।
class Dog
def initialize(name, breed)
@name = name
@breed = breed
end
def to_s
puts "#@name's breed is #@breed."
end
end
terra=Dog.new("Terra","Husky")
puts terra #Terra's breed is Husky.
p terra #<Dog:0x00007fbde0932a88 @name="Terra", @breed="Husky">
+1 को लिंक जोड़ने के लिए +1 – edwardsmatt
पी के लिए दस्तावेज़ों में सीधा लिंक - http://www.ruby-doc.org/core-1.8.7/Kernel.html#method-i-p – Joe