2010-09-17 12 views
7

शामिल directive आमतौर पर .erl फ़ाइल के शीर्ष पर एक .hrl फ़ाइल के लिए उपयोग किया जाता है।Erlang: कंसोल से शामिल का उपयोग कर?

लेकिन, मैं सीधे Erlang कंसोल से शामिल करना चाहते हैं।

मैं मॉड्यूल में कुछ फ़ंक्शंस का उपयोग करने की कोशिश कर रहा हूं। मैंने कंसोल से एआरएल फ़ाइल संकलित की है। लेकिन, जिन कार्यों का मैं उपयोग करना चाहता हूं वे एचआरएल फ़ाइल तक पहुंच के बिना काम नहीं करते हैं।

कोई सुझाव?

+0

आपका वास्तव में क्या मतलब है? 'अंतर्निहित' निर्देश एक संकलन सुविधा है। यदि आपने फ़ाइल को सफलतापूर्वक संकलित किया है तो इसमें कोई भी फ़ंक्शन जिसमें फ़ाइल शामिल करने से "चीजें" की आवश्यकता होती है, उनमें से कंपाइलर यह जांचता है। तो संकलन के बाद फ़ंक्शन शामिल फ़ाइल तक पहुंच के बिना काम करेंगे। यह क्या है जो काम नहीं करता है? कौन सी पहुंच यह है कि आप की कमी है? – rvirding

+0

मैं jsonerl स्थापित करना चाहता हूं जिसमें एक एचआरएल फ़ाइल है (http://github.com/lambder/jsonerl)। फ़ाइल लिखने और फिर इसे संकलित करने के बजाय, मैं सीधे एचएलएल फिएल में कार्यों को शैल से उपयोग करना चाहता हूं। –

उत्तर

2

क्या आपने compile:file विकल्प का प्रयास किया है? आप मॉड्यूल की एक सूची पारित कर सकते हैं इस प्रकार शामिल होने के लिए:

compile:file("myfile.erl", [{i, "/path/1/"}, {i, "/path/2/"}]) 
+0

सूची में टुपल का पहला तत्व क्या दर्शाता है .. मैं? मुझे लगता है कि दूसरा तत्व .hrl फ़ाइल के पथ का प्रतिनिधित्व कर सकता है ... –

+0

परमाणु 'i', यह दर्शाता है कि दूसरा तत्व शामिल होना है। –

+0

धन्यवाद मनोज ... यह शायद काम करता है। लेकिन मेरे उपयोग के मामले में, ऐसा प्रतीत नहीं होता है। मैं इस मॉड्यूल को एरलांग कंसोल से चलाने की कोशिश कर रहा हूं http://github.com/lambder/jsonerl –

8

"। लेकिन, कार्यों मैं उपयोग करने के लिए HRL फ़ाइल तक पहुँच के बिना काम नहीं करना चाहते हैं"

यह सच नहीं हो सकता है, लेकिन इससे मैं अनुमान लगाता हूं कि आप hrl फ़ाइल में रिकॉर्ड्स तक पहुंच चाहते हैं जो आप (आमतौर पर) खोल में नहीं करते हैं।

यदि आप rr(MODULE) करते हैं तो आप MODULE में परिभाषित सभी रिकॉर्ड लोड करेंगे (जिसमें MODULE द्वारा शामिल फ़ाइल शामिल है) शामिल हैं।

फिर आप खोल से जो कुछ भी चाहते हैं वह कर सकते हैं।

(एक और बात आप संभवतः के परीक्षण के लिए चाहते हो सकता है परीक्षण के लिए कभी कभी अपने erl फाइल करने के लिए लाइन -compile(export_all) जोड़ना है। बदसूरत है, लेकिन अच्छा है।)

2

यह लायक कुछ भी नहीं है कि किसी भी jsonerl.hrl कार्यों शामिल नहीं करता है । इसमें मैक्रोज़ हैं। जहां तक ​​मुझे पता है, मैक्रोज़ एरलांग में संकलन-समय-निर्माण ही हैं।

उन्हें उपलब्ध कराने का सबसे आसान तरीका एक .erl फ़ाइल स्वयं बनाना होगा जो वास्तव में मैक्रो के संदर्भ में लागू किए गए कार्यों की घोषणा करता है। इस तरह हो सकता है कि कुछ:

-module(jsonerl_helpers). 
-include("jsonerl.hrl"). 

record_to_struct_f(RecordName, Record) -> 
    ?record_to_struct(RecordName, Record). 

... जो, आप संकलन के बाद, आप के रूप में कह सकते हैं:

jsonerl_helpers:record_to_struct_f(RecordName, Record) 

मैं नहीं जानता कि क्यों लेखक मैक्रो के रूप में उन लागू करने के लिए चुना है; यह अजीब लगता है, लेकिन मुझे यकीन है कि उसके कारण थे।

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