2013-03-26 12 views
6

पैदा विफल रहता है मैं अपाचे बचत में एक मानक वृक्ष संरचना का प्रतिनिधित्व करना चाहता था, लेकिन मैं समस्या निम्नलिखित का सामना करना पड़ा:अपाचे बचत पुनरावर्ती structs

[ERROR:/path_to_project/thrift/service.thrift:31] (last token was 'TCategoryTree') 
Type "TCategoryTree" has not been defined. 

ये मेरी बचत संरचनाओं हैं:

struct TCategory { 
    1: required string name 
} 

struct TCategoryTree { 
    1: required TCategory element, 
    2: optional list<TCategoryTree> children 
} 

लाइन 31 2: optional list<TCategoryTree> children है, जहां मैं एक क्षेत्र परिभाषित करता हूं जिसमें वही प्रकार है जिसे मैं अभी परिभाषित कर रहा हूं।

क्या यह हो सकता है कि अपाचे थ्रिफ्ट रिकर्सिव संरचनाओं का समर्थन नहीं करता है या क्या मैं किसी प्रकार की गलती कर रहा हूं?

संपादित करें: मैं संस्करण 0.9.0

उत्तर

7

हाँ उपयोग कर रहा हूँ, Unfortuantely बचत अभी तक पुनरावर्ती संरचनाओं की अनुमति नहीं है। इस सीमा के लिए कामकाज हैं, उदा। उन्हें प्रसारित करते समय अपने डेटा संरचनाओं को फ़्लैट करें। ज्यादातर मामलों में यह व्यवहार्य है, हालांकि इसे दोनों तरफ कुछ अतिरिक्त कोड की आवश्यकता होती है। वर्तमान बचत विकास ट्रंक अब थोड़ी देर के लिए इस का समर्थन करता है http://grokbase.com/t/thrift/user/0984cqwxen/recursive-datatypes


अद्यतन

:

यहाँ एक अच्छा उदाहरण है यह कैसे करना है। सावधान रहें, क्योंकि यह अंतहीन संदर्भ लूप (एक संदर्भ बी संदर्भ ए ...) के लिए अनुमति देता है जिसके परिणामस्वरूप धारावाहिक करने का प्रयास करते समय एक स्टैक ओवरफ़्लो होता है।