2013-03-26 12 views
6

üreten başarısız, ama sorun şu karşılaştı:apache tasarruf ben apache tutumluluk standart ağaç yapısını temsil etmek istediğini özyinelemeli yapılar

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

Bunlar benim tasarruf yapılar şunlardır:

struct TCategory { 
    1: required string name 
} 

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

31. Satır 2: optional list<TCategoryTree> children, burada şu an tanımladığım türde bir alanı tanımladım.

Apache tutumunun özyinelemeli yapıları desteklememesi veya hata yapması olabilir mi?

düzenleme: unfortuantely Thrift henüz özyinelemeli yapıları izin vermez,

cevap

7

Evet 0.9.0 kullanıyorum. Bu sınırlama için geçici çözümler vardır, ör. veri yapılarınızı aktarırken düzleştirin. Çoğu durumda, bu her iki tarafta da ekstra kod gerektirmesine rağmen, bu mümkündür.

İşte bunu nasıl iyi bir örnek: http://grokbase.com/t/thrift/user/0984cqwxen/recursive-datatypes


Güncelleme

akım Thrift geliştirme gövde bir süredir bu destekler. Dikkatli olun, sonsuz referans döngülere izin verdiği için (A referansları A referansı A ...) seri hale getirmeye çalışırken yığın taşmasıyla sonuçlanır.