gpt4 book ai didi

c# - 为了最大限度地提高跨语言兼容性,推荐的 Thrift 标识符命名约定是什么?

转载 作者:太空宇宙 更新时间:2023-11-03 18:29:06 25 4
gpt4 key购买 nike

Thrift 中是否有推荐的标识符命名约定?

例如,我们有一个 Thrift IDL,由通常是 C# 程序员的人编写。由此生成的源代码可以在 C# 和 Python 中运行。然而,尽管可以从同一个 Thrift 文件生成 Java 代码,但 IDL 作者给出的标识符名称与其类型完全相同的地方都会出现 Java 编译器错误。例如:

enum DataType {
Text,
Integer
}

struct Metadata {
1: string ColumnName,
2: DataType DataType
}

请注意,“DataType”标识符与其类型具有相同的名称(包括大小写)。生成的 Java 代码(使用 --gen java Thrift 编译器选项)具有如下编译器错误:

Cannot make a static reference to the non-static field DataType

我自己不是 C# 程序员,但我知道以大写字母开头的标识符名称在 C# 中是很常见的做法。按照目前的情况,我们将不得不更改 IDL 以使用小写字母作为标识符名称(例如,DataType dataType)并重新生成所有客户端;但如果对 Thrift 标识符的命名约定有一些建议,那将会有所帮助,这样我们就不会在其他语言中遇到类似的问题。

顺便说一句,我确实尝试过 --gen java:nocamel 但这并没有解决问题。

最佳答案

除了标识符的常用规则和编译器告诉您的内容之外,没有强制执行或官方推荐的命名约定。尽管许多已知的冲突已经应用了某种解决方法,但仍然存在很多发生冲突的可能性。您必须找出适合您的方法。

最好的选择是重命名 IDL 文件中的冲突字段,或者添加下划线。对于RPC和序列化,字段名称并不重要,只有字段ID很重要。因此,重命名字段并不是序列化数据的兼容性破坏者,仅涉及源代码,这是可以修复的。

<小时/>

编辑:Here is a nice example对于仍然悬而未决的命名问题。由于 the nature of the problem ,它仅用一种非常特定的语言来体现:Go。只要您坚持使用 Thrift 支持的任何其他语言,您就永远不会遇到该 IDL 的麻烦。尽管如此,这样的事情应该得到解决。

关于c# - 为了最大限度地提高跨语言兼容性,推荐的 Thrift 标识符命名约定是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22691634/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com