是否可以在 Thrift 结构中为联合、嵌套结构和容器定义默认值?
Is it possible to define default values for union, nested struct and containers in Thrift struct?
我有一个 thrift 结构,它有许多不同类型的字段。其中一些可能有也可能没有默认值。
问题是如何在 .thrift 文件中定义默认值?
enum E {
A = 1,
B = 2,
C = 3
}
struct Nested {
1: i64 f1,
2: required string f2,
3: optional E f3 = E.B
}
union Union {
1: string f1;
2: string f2;
}
struct TestStruct {
1: optional E f1 = E.A,
2: required i64 f2 = 1,
3: required string f3 = "f3",
4: Nested f4,
5: Union f5,
6: map<string, i64> f6,
7: set<i64> f7,
8: list<string> f8
}
考虑到这个例子,是否可以为字段 f4-f8 定义默认值?
我假设这是不可能的,但是thrift docs没有直接说。
ConstantsDemo.thrift 文件提供了一些示例,例如:
struct thing {
1: i32 hello,
2: i32 goodbye
}
const map<string,i32> GEN_MAP2 = { "hello" : 233, "lkj98d" : 853, 'lkjsdf' : 098325 }
所以解决方案可能如下所示:
struct TestStruct {
1: optional E f1 = E.A,
2: required i64 f2 = 1,
3: required string f3 = "f3",
4: Nested f4 = { f1 : 24, f2 : "i am required", f3 : E.B }
5: Union f5 = { f1 : "one" }
6: map<string, i64> f6 = { "hello": 42, "goodbye":24 },
7: set<i64> f7 = [ 1, 2, 3, -4 ]
8: list<string> f8 = ["bla","bla","bla"]
}
请注意 set<>
和 list<>
(括号)的语法不同于 map<>
(大括号)。
虽然我在 4 和 5 上遇到了一个奇怪的错误...不确定那是不是 bug。
我有一个 thrift 结构,它有许多不同类型的字段。其中一些可能有也可能没有默认值。
问题是如何在 .thrift 文件中定义默认值?
enum E {
A = 1,
B = 2,
C = 3
}
struct Nested {
1: i64 f1,
2: required string f2,
3: optional E f3 = E.B
}
union Union {
1: string f1;
2: string f2;
}
struct TestStruct {
1: optional E f1 = E.A,
2: required i64 f2 = 1,
3: required string f3 = "f3",
4: Nested f4,
5: Union f5,
6: map<string, i64> f6,
7: set<i64> f7,
8: list<string> f8
}
考虑到这个例子,是否可以为字段 f4-f8 定义默认值?
我假设这是不可能的,但是thrift docs没有直接说。
ConstantsDemo.thrift 文件提供了一些示例,例如:
struct thing { 1: i32 hello, 2: i32 goodbye } const map<string,i32> GEN_MAP2 = { "hello" : 233, "lkj98d" : 853, 'lkjsdf' : 098325 }
所以解决方案可能如下所示:
struct TestStruct {
1: optional E f1 = E.A,
2: required i64 f2 = 1,
3: required string f3 = "f3",
4: Nested f4 = { f1 : 24, f2 : "i am required", f3 : E.B }
5: Union f5 = { f1 : "one" }
6: map<string, i64> f6 = { "hello": 42, "goodbye":24 },
7: set<i64> f7 = [ 1, 2, 3, -4 ]
8: list<string> f8 = ["bla","bla","bla"]
}
请注意 set<>
和 list<>
(括号)的语法不同于 map<>
(大括号)。
虽然我在 4 和 5 上遇到了一个奇怪的错误...不确定那是不是 bug。