Thrift解析器有一个"注释"的定义:
这些意味着什么,并且可以在生成的客户端和/或服务器代码中访问它们包含的信息?
答案 0 :(得分:2)
注释用于将元数据与Thrift定义(“.thrift”)文件中定义的类型相关联。源代码发布中的The AnnotationThrift.test
file有示例。
例如,这里是带注释的struct
(在括号中):
struct foo {
1: i32 bar ( presence = "required" );
2: i32 baz ( presence = "manual", cpp.use_pointer = "", );
3: i32 qux;
4: i32 bop;
} (
cpp.type = "DenseFoo",
python.type = "DenseFoo",
java.final = "",
annotation.without.value,
)
查看代码,似乎注释只用于向编译器提供指令 - 例如,C ++编译器在生成的代码中使用cpp.type
注释(如果存在)到override a type's name
我没有看到任何迹象表明注释本身在生成的代码中被复制或可访问,但如果这样的代码 存在,它将位于compiler/cpp/src/generate/
。
答案 1 :(得分:2)
正如Simon所指出的,注释可以被想象为基本IDL语言的扩展点,以控制代码生成的某些方面。它们通常是语言特定的,但不限于此。在某些情况下,注释后来已成为核心IDl的一部分。另一件事是,注释仍然很难记录(我在这里很友好)。
可以在生成的客户端和/或服务器代码中访问它们包含的信息吗?
这取决于注释和你所说的"访问"。如果通过注释更改基类,或者创建Java类final
,则信息当然会出现在生成的代码中。
答案 2 :(得分:1)
我们通过Go Thrift parser利用了注释。示例包括Thrift linter,其中注释选择性地禁用检查。