2011-08-25 11 views
5

Ive आरएक्स पुस्तकालय investiging दिया और निम्न वीडियो से उदाहरण दोहराने की कोशिश की है ...आरएक्स Let समारोह

http://channel9.msdn.com/blogs/j.van.gogh/writing-your-first-rx-application

यह चीजों को कुछ संशोधनों कि बदल दिया गया है के साथ सभी काम करता है (/ पदावनत) ऊपर जब तक वह इस्तेमाल किया ...

.Let(mm => ...) 

यह एक संकलक त्रुटि कह है कि वहाँ लेट के लिए कोई परिभाषा फेंकता है, इसलिए मुझे लगता है कि Let कुछ करने के लिए किसी और बदल दिया गया है, या पूरी तरह से हटा दिया, लेकिन मैं किसी भी लगता है नहीं कर सकते एक googling से समाधान।

तो क्या किसी को पता है कि इस उदाहरण में क्या उपयोग करना है?

उत्तर

0

अभी भी मौजूद है, क्या यह आपके लिए काम नहीं करता है?

var observable = new Subject<int>(); 
observable.Let(mm => mm); 

शायद आप नामस्थान आयात भूल गए हैं? (System.Reactive.Linq)?

+0

हाय नहीं जो काम नहीं करता है और मैंने पहले से ही कथन का उपयोग करके जोड़ा है, शायद यह कुछ असेंबली में है जिसे मैंने संदर्भित किया है? मैंने निम्नलिखित संदर्भित किया है ... सिस्टम। प्रतिक्रियाशील, सिस्टम। प्रतिक्रियाशील। प्रदाता, सिस्टम। प्रतिक्रियाशील .indows.Threading – electricsheep

+0

इसकी प्रणाली में। सक्रिय असेंबली। आप आरएक्स का किस संस्करण का उपयोग कर रहे हैं, और किस मंच पर? – chrisaut

+0

यह एक डब्ल्यूपीएफ एप्लीकेशन है और इसका संस्करण मुझे NuGet – electricsheep

1

किसी अन्य का उपयोग करने का प्रयास करें। एक प्रकार का चयन करें और प्रोजेक्ट करें जिसमें आपके नए चर और आने वाले अवलोकन योग्य मूल्य शामिल हैं।

1

आप शायद EnumerableEx.Let का उपयोग करने की कोशिश कर रहे हैं जिसे इंटरएक्टिव एक्सटेंशन के वर्तमान प्रायोगिक संस्करण से हटा दिया गया है। वे इसे वापस में इस दौरान आसानी से ऐसा तरह डाल देता हूँ

आप इसे अपने आप को परिभाषित कर सकते हैं:।

public static class EnumerableExx 
{ 
    public static U Let<T,U>(this T source, Func<T,U> f) 
    { 
     return f(source); 
    } 
} 

नोट इस संस्करण में किसी भी प्रकार बस नहीं IEnumerable के साथ काम करता है।

आप मेमोइज़ (...) का भी उपयोग कर सकते हैं, जो बेहतर हो सकता है क्योंकि यह बाईं ओर संग्रह को कैश करता है।

1

Let बस आपको अभिव्यक्ति अपना नाम देने की अनुमति देता है ताकि आप बाद में स्थानीय चर का उपयोग किए बिना इसका पुन: उपयोग कर सकें। आप हमेशा एक आरएक्स अभिव्यक्ति को टुकड़ों में विभाजित कर सकते हैं और टुकड़ों को स्थानीय चरों में असाइन कर सकते हैं। क्या आप मूल क्वेरी पोस्ट कर सकते हैं और मैं आपको दिखाऊंगा कि इसे कैसे डिलीट करना है?

6

जिम वूली के सुझाव के अनुसार।

मुझे लगता है कि कोड आप देख रहे हैं

var q = from start in mouseDown 
    from delta in mouseMove.StartWith(start).Until(mouseUp) 
    .Let(mm=> mm.Zip(mm.Skip(1), (prev, curr) => 
       new { X = curr.X - prev.X, Y = curr.Y - prev.Y})) 
    select delta; 

याद है कि 2009 में लिखा गया था और Rx कुछ साथ चल तब से है। मुझे लगता है कि यह वही है जो आप चाहते हैं। मुझे लगता है कि चलो एक ऐसी सुविधा है जिसे आप आरएक्स में टालना चाहते हैं (भले ही आपके लिए उपलब्ध हो) क्योंकि यह साइड इफेक्ट्स को प्रोत्साहित कर सकता है। इसके बजाय चयन के साथ परिवर्तन का प्रयोग करें। नीचे दिए गए मामले में, चलो बस जरूरी नहीं है।

//Gets the delta of positions. 
var mouseMovements = mouseMove.Zip(mouseMove.Skip(1), (prev, curr) => 
       new { X = curr.X - prev.X, Y = curr.Y - prev.Y})); 
//Only streams when mouse is down 
var dragging = from md in mouseDown 
       from mm in mouseMovement.TakeUntil(mouseUp) 
       select mm;