मैं जोशुआ सुएरेथ द्वारा «गहराई में स्केल» पढ़ रहा हूं, पुस्तक जिसे मैंने लेखक की स्पष्ट रूप से स्थापित योग्यता के लिए खरीदा है। मैं पेज 3 पर हूं और टाइपो और असंगत स्वरूपण के समूह के बाद (ठीक है, मैं इन त्रुटियों का सहिष्णु बन गया हूं) मैंने एक बहुत ही सरल परिदृश्य को हल करने के लिए एक कार्यात्मक दृष्टिकोण के बारे में निम्नलिखित उदाहरण पर ठोकर खाई।स्कैला एपीआई 2.10। *: फंक्शन 2.और फिर क्या हुआ?
trait Cat
trait Bird
trait Catch
trait FullTummy
def catch(hunter: Cat, prey: Bird): Cat with Catch
def eat(consumer: Cat with Catch): Cat with FullTummy
val story = (catch _) andThen (eat _)
story(new Cat, new Bird)
मैं उदाहरण ले लिया सावधानी के साथ प्रदान की यह स्पष्ट रूप से एक नीली प्रिंट (कोई ठोस तरीकों परिभाषित कर रहे हैं ...) ... «पकड़» स्पष्ट रूप से एक और टाइपो बशर्ते वह एक आरक्षित शब्द है ... Cat
और Bird
instantiable नहीं हैं है ...
... लेकिन एक और आकस्मिक गलती यह प्रदान, उदाहरण की खराब गुणवत्ता के बावजूद, मैं विचार नहीं कर सकता कि «कहानी» वैल समारोह रचना के संदर्भ में परिभाषित (andThen
«रिवर्स साहचर्य» compose
की है) है उदाहरण के कोर।
प्रभावी रूप से उदाहरण स्कैला (2.10.1) के मेरे स्थानीय संस्करण पर संकलित नहीं होगा और यह उपलब्ध नवीनतम संस्करण (2.10.2) पर दस्तावेज नहीं है।
(अनुसरण करें) इसकी उपयोगिता की और कहा कि इसके कार्यान्वयन को पूरा करने के लिए आसान है कोई संदेह नहीं है:
trait Function2ex[-T1, -T2, +R] extends Function2[T1, T2, R] {
def andThen[A](g: R => A): (T1, T2) => A = { (x, y) => g(apply(x, y)) }
}
एपीआई मैंने पाया की एक छोटी सी जांच के बाद कि andThen
केवल Function1 द्वारा और माना जाता है कि गायब हो गया समर्थित है Function2 से Function22 को हां, तो सवाल यह है:
वर्तमान मुहावरा 1 से अधिक arity के समारोह के साथ * andThen
और compose
समर्थन करने के लिए क्या है?
क्या आप कृपया tupled के बारे में विस्तार से बता सकते हैं। आपको इसका उपयोग क्यों करना पड़ा (मुझे पता है कि यह अन्यथा काम नहीं करता है, लेकिन हमें इसे क्यों करना है, क्योंकि खाने को एकल पैरामीटर "उपभोक्ता" के बजाय टुपल स्वीकार नहीं किया जाता है)? और क्या यह वास्तव में – igx
हम इसे टपल क्योंकि '(\' पकड़ \ '_)' एक 'Function2' है, जो एक' andThen' विधि नहीं है है कर रही है। और रिटर्न टाइप ('कैट विद कैच') को 'खाने' के तर्क प्रकार से मेल खाना पड़ेगा। –
इसलिए हम वास्तव में tupled आदेश "andthen" समारोह, सही पाने के लिए Function1 करने के लिए इसे परिवर्तित करने के लिए उपयोग कर रहा? – igx