2013-10-22 7 views
6

मैं इस तरह एक लॉग समारोह लागू करना चाहते हैंरूबी में वर्तमान फ़ाइल और लाइन नंबर कैसे प्राप्त करें?</p> <pre><code>def mylog(str) puts __FILE__, ":"__LINENO__, ":", str # Here how to get __FILE__ and __LINENO__ is my question. end </code></pre> <p>जब मैं <code>mylog</code> फोन:

mylog 'hello' # say I call this in my.rb line 10 

मैं उम्मीद उत्पादन:

my.rb:10:hello 

कृपया मदद mylog समारोह के सही कार्यान्वयन देना ।

+0

और एक अलग रूप में, यह '__LINE__' कि मौजूदा लाइन रिटर्न (नहीं' __LINENO__') –

उत्तर

5

आप का उपयोग करना होगा caller

def mylog(str) 
    caller_line = caller.first.split(":")[1] 
    puts "#{__FILE__} : #{caller_line} : #{str}" 
end 

शायद आप उस फ़ाइल को जानना चाहेंगे जिस से mylog भी कहा जाता था ...

def mylog(str) 
    caller_infos = caller.first.split(":") 
    puts "#{caller_infos[0]} : #{caller_infos[1]} : #{str}" 
end 
+0

यह काम करता है, लेकिन सबसे अच्छा नहीं है। 'कॉलर' का उपयोग करना पुराना है। – sawa

+0

भविष्य के पाठकों के लिए हाँ, लेकिन अभी के लिए मैं रूबी 2.0 – gmalette

+0

'कॉलर_लाइन = कॉलर [0] .split (":") [1] मानना ​​नहीं चाहता था; "# {__ FILE __}: # {caller_line}: # {str}" 'FYI, आप इस उदाहरण में शून्य को बढ़ाकर 1, 2, आदि तक कॉल स्टैक को पार कर सकते हैं –

5

सही चर लाइन नंबर __LINE__ है पाने के लिए है, तो आपके समारोह के उचित कार्यान्वयन

def mylog(str) 
puts "#{__FILE__}:#{__LINE__}:#{str}" 
end 

संपादित इतना उत्पादन तुम्हारा मेल खाता होगा

+1

है ओ पी की गलती '__FILE__' प्रयोग करने के लिए गुमराह आपके पास करने के लिए है, लेकिन उस फ़ाइल और रेखा देता है जहां 'रखता है' विधि लिखी जाती है। – sawa

+0

आह हाँ, अनुमान लगाया कि मैं इसे पूरी तरह से समझने के बिना बहुत जल्दी कूद गया। – Teddy

+0

स्पष्टता के लिए, टिप्पणियां "फंक्शन कॉल" बनाम "फंक्शन कॉल" स्थान के बारे में हैं। –

9

caller का उपयोग पुरानी शैली है। इसके बजाय, caller_locations का उपयोग करें।

def mylog(str) 
    caller_locations(1, 1).first.tap{|loc| puts "#{loc.path}:#{loc.lineno}:#{str}"} 
end 
+0

खुराक कॉलर_लोकेशन को कुछ रूबी संस्करण की आवश्यकता होती है? – TieDad

+0

हां। यह रूबी 2.0 में पेश किया गया था। – sawa

संबंधित मुद्दे