मैं इस कोड के साथ काम कर रहा हूँ:स्काला मामले वर्ग पैरामीटर
case class State[S, +A](run: S => (A, S)) {
...
def flatMap[B](f: A => State[S, B]): State[S, B] = State(s => {
val (a, s1) = run(s)
f(a).run(s1)
})
...
}
यह, पूरी तरह कार्यात्मक राज्य के साथ काम करने FP in Scala की §6 से के लिए एक अमूर्त है। run
फ़ंक्शन पैरामीटर है जो एक राज्य लेता है और एक मान और नए राज्य का एक tuple उत्सर्जित करता है।
मेरे सवाल इस खंड में वाक्य रचना s =>
के आसपास है:
... B] = State(s => { ...
यह एक नया राज्य वस्तु का निर्माण करने के State
'निर्माता' उपयोग कर रही है (यानी apply
)। लेकिन s
क्या दर्शाता है? क्या यह एक 'अज्ञात' राज्य है, जो किसी भी राज्य के उदाहरण का प्रतिनिधित्व करता है? यदि हां, तो यह this
से अलग कैसे है? या रों यानी से S
run
के इनपुट पैरामीटर के अनुरूप है:
... (run: S => ....
और क्यों मैं एक समारोह परिभाषा के लिए एक निर्माता का उपयोग करेंगे? ध्यान दें कि फ्लैटमैप परिभाषा का अंतिम प्रतीक )
}
नहीं है, जो कि State
क्लोजर लागू कर रहा है।
इस परिदृश्य मानक
case class Person(name: String)
परिदृश्य की तुलना में थोड़ा अलग है, तो मैंने सोचा कि मैं पूछना चाहता हूँ ...
बहुत बहुत धन्यवाद @ dk14। यहां देर हो चुकी है इसलिए मैं इसे ठीक से कल ठीक कर दूंगा और वोट दूंगा। दिलचस्प बात यह है कि मैं देख रहा हूं [स्कालाज़ स्टेट मोनाड] (https://www.youtube.com/watch?v=Jg3Uv_YWJqI) जो इस सटीक स्थिति को दिखाता है। प्रस्तुतकर्ता को 18:40 बजे प्रस्तुत करना, वाक्यविन्यास एक "लैम्ब्डा है जो एक एस लेता है और एक एसबी लौटाता है, जो राज्य में उठाया जाता है"। –
आपके प्रश्न के उदाहरण में सादे प्रकार से मोनैड ("रिटर्न" ऑपरेटर) से उठाने के लिए 'State.apply (run: S => (ए, एस)) द्वारा प्रतिनिधित्व किया जाता है। वैसे, यह एक 2012 साल का वीडियो है, आधुनिक स्कालज 'एस => (ए, एस)' को 'राज्य.प्ली' के अंदर स्वीकार नहीं करता है - यह केवल [स्टेट्स.स्टेट (एफ: एस => (एस, ए))] (http://scalaz.github.io/scalaz/scalaz-2.9.1-6.0.2/doc.sxr/scalaz/State.scala.html#40600) विधि, इसलिए केवल एक ही है एक "वापसी" विधि। – dk14