【发布时间】:2014-02-01 20:42:57
【问题描述】:
我的问题与问题非常相似 Default arguments with default values in Thrift Python client 从未完全解决(一个答案是猜测,另一个很难理解)。
问题是,您能否为服务方法设置一个默认参数,而无需为每个需要的方法创建一个结构。我有以下 Java 服务,我想用 Thrift 处理程序进行包装
class MyService {
public void foo(){ foo(false); }
public void foo(boolean someAdvancedFeature){...}
}
所以我想创建 Thrift IDL
service MyServiceThrift {
void foo(),
void foo(1:bool),
}
但这是无效的,因为您不能有 2 个名为 foo 的方法。所以我尝试了
service MyServiceThrift {
void foo(1:optional bool someAdvancedFeature = false)
}
但是我得到一个解析错误,说 Cannot use reserved language keyword: "false" 所以我虽然很好,也许我可以让它成为可选的
service MyServiceThrift {
void foo(1: optional bool someAdvancedFeature)
}
但我收到了警告 optional keyword is ignored in argument lists.,事后看来这很有意义,因为它只是在创建创建接口。
那么,为每个采用可选参数的方法创建一个新的struct 的唯一方法是什么? (是的,您可以将结构重新用于某些方法,但是对于参数的每个排列,我都需要一个,另外,如果一种方法添加了参数而其他方法没有添加参数,那么这会破坏事情的发展)。让用户创建一个(可能为空的)类只是为了将参数传递给一个方法似乎很愚蠢,而且我真的不喜欢必须为我的服务中的每个方法生成/维护一个单独的类的想法。我错过了什么吗?
【问题讨论】:
-
即使是一年之后,但似乎这个布尔默认值没有记录在任何地方,我很难学会。 thrift 结构中的布尔值(默认)值为 0 或 1,而不是 false 或 true。所以在节俭中它应该是“bool someAdvancedFeature = 0”