ठीक है। ScriptEngine.eval(String string)
अपनी स्ट्रिंग में एक स्ट्रिंग का मूल्यांकन करता है, और ScriptEngine.eval(Reader reader)
Reader
से पूरी तरह से इनपुट का मूल्यांकन करता है।jsr223 + एक स्क्रिप्ट दुभाषिया लिखना
तो अगर मेरे पास फ़ाइल है, तो मैं एक फ़ाइल इनपुटप्रीम खोल सकता हूं, इसके चारों ओर एक पाठक लपेट सकता हूं, और scriptEngine.eval(reader)
पर कॉल कर सकता हूं।
यदि मेरे पास स्ट्रिंग के रूप में पूर्ण विवरण है, तो मैं scriptEngine.eval(string)
पर कॉल कर सकता हूं।
यदि मुझे एक इंटरैक्टिव दुभाषिया को लागू करने की आवश्यकता है तो मैं क्या करूँ? मेरे पास एक ऐसा उपयोगकर्ता है जो एक बहुभाषी कथन में इंटरैक्टिव टाइपिंग कर रहा है, उदा।
function f() {
return 3;
}
अगर मैं लाइन द्वारा इनपुट लाइन पढ़ा है, और eval()
की स्ट्रिंग फार्म का उपयोग करें, मैं इसे अधूरा बयान करता है, उदा गुजर पहुंच जाएंगे function f() {
और एक त्रुटि प्राप्त करें।
यदि मैं एक पाठक में पास करता हूं, तो ScriptEngine
इनपुट पूर्ण होने तक हमेशा के लिए प्रतीक्षा करेगा, और यह इंटरैक्टिव नहीं है।
सहायता!
बस स्पष्ट करने के लिए: समस्या यहाँ है कि मैं केवल ScriptEngine.eval()
पूरा बयान से पारित सकता है, और ScriptEngine के ग्राहक के रूप में, मैं नहीं जानता कि एक इनपुट लाइन ScriptEngine से ही कुछ मदद के बिना पूरा हो गया है जब।
राइनो के इंटरैक्टिव खोल का उपयोग करता राइनो के Context.stringIsCompilableUnit()
(usage और implementation के लिए LXR देखें)।
... और कैसे है कि मदद करता है? मुझे स्क्रिप्टिंगइंजिन से सहायता के बिना अपूर्ण कथन और पूर्ण बयान के बीच अंतर कैसे करना चाहिए? –
"रिक्त रेखा पर प्रवेश करें उपयोगकर्ता इनपुट के अंत संकेत" - आईसीके - यह काम करेगा, लेकिन यह कष्टप्रद है। –
किसी भी स्ट्रीम से आने वाले अधूरे कथन को रोकने के लिए कुछ भी नहीं है, चाहे वह फ़ाइल, नेटवर्क कनेक्शन या कीबोर्ड हो। आपको कुछ पूर्व-सत्यापन करना होगा या eval impl को कथन को संभालने/सत्यापित करने के लिए आवश्यक कार्रवाई करना होगा, पूरा नहीं हुआ है। दूसरा, प्रत्येक स्ट्रीम में एक अंत मार्कर होना चाहिए। गैर-कीबोर्ड स्ट्रीम से पढ़ना कुछ ध्वज मूल्य जैसे ईओएफ, -1, नल इत्यादि देता है। आप इनपुट के अंत के लिए जो भी साधन चाहते हैं उसे चुन सकते हैं लेकिन उपयोगकर्ता को निर्धारित करने के लिए एक प्रोग्रामेटिक तरीका होना चाहिए। – karakuricoder