मैं मज़े के लिए एक प्रोग्रामिंग भाषा मॉडलिंग कर रहा हूं, और सिंटैक्स स्कैला से बहुत प्रभावित होता है - विशेष रूप से फ़ंक्शन परिभाषा।
मुझे एक डिज़ाइन समस्या का सामना करना पड़ा है क्योंकि मेरी भाषा सिंटैक्स (वर्ग विधियों) के माध्यम से परिभाषित फ़ंक्शन और मानों को सौंपे गए अनाम फ़ंक्शंस के बीच अंतर नहीं करती हैdef
( =>
इसका उपयोग करके बनाया गया है ) - यह कार्यान्वयन और व्यवहार दोनों में अंतर को हटा देता है ।
परिणाम यह है कि निम्नलिखित दो परिभाषाओं का मतलब एक ही है:
def square(x: Int) = x*x
val square = (x: Int) => x*x
बाद के फॉर्म (तत्काल अनाम फ़ंक्शन असाइनमेंट) का किसी भी सामान्य स्थिति में उपयोग करने का कोई कारण नहीं है - फॉर्म के बजाय इसका उपयोग करना संभव है def
।
नामित कार्यों को परिभाषित करने के लिए इस तरह के डुप्लिकेट सिंटैक्स होने से भाषा या किसी अन्य डिजाइन पहलू की रूढ़िवादिता को चोट पहुंचेगी?
मैं इस समाधान को पसंद करता हूं क्योंकि यह विधियों और नामित कार्यों (के माध्यम से def
) की छोटी और सहज परिभाषाओं के लिए अनुमति देता है , और अनाम कार्यों (उपयोग =>
) की कम परिभाषाओं के लिए ।
संपादित करें: स्काला दोनों के बीच अंतर करता है - अनाम फ़ंक्शन def
स्कैला में परिभाषित तरीकों के समान नहीं हैं । हालांकि मतभेद अपेक्षाकृत सूक्ष्म हैं - मैं पहले से जुड़े पदों को देखता हूं।
val
अंकन का उपयोग करके पुनरावर्ती कार्यों को परिभाषित कर सकते हैं ?
fun
पुनरावर्ती फ़ंक्शन को परिभाषित करने के लिए उपयोग करना होगा।
def
है। यह इस तथ्य का सिर्फ एक पक्ष प्रभाव है कि एक अनाम कार्य, कहना (x : Int) => x + 1
एक वस्तु है, और वस्तुओं को मूल्यों के साथ सौंपा जा सकता है val f = ...
। भाषा डिजाइनरों को सिंटैक्स को हटाने के लिए अपने रास्ते से बाहर जाना पड़ा होगा । यह दो अलग-अलग वाक्यविन्यासों का समर्थन करने के प्रयास में स्पष्ट रूप से समान नहीं है जो एक ही चीज़ करते हैं (लगभग)।
However, assigning existing functions
वाक्य का अंत याद आ रहा है