4

我有 Python 客户端调用一个 Thrift 服务,其中包含一些可选参数,如下所示:

bool postTweet(1: required Tweet tweet, 2: i32 x = 100);

如果我尝试在不传递可选参数 x 的情况下从 Python 客户端调用此服务,则会出现异常:

TypeError: postTweet() takes exactly 2 arguments (1 given)

任何线索为什么我得到这个异常但是它是带有默认值的可选参数?

4

2 回答 2

6

不可能用默认值定义一个 thrift 函数(至少从我阅读 thrift 白皮书后的理解来看)

你可以做的是定义一个特殊的参数结构,让你省略一些字段。

节俭代码示例:

struct PostTweetParameter {
1: required Tweet tweet;
2: optional i32 x;
}

bool postTweet(1: PostTweetParameter param);

然后您可以构造省略PostTweetParameter字段。x

于 2013-07-15T21:34:32.170 回答
1

x 参数必须与其他参数分开定义。否则,它可能会搞砸其他事情。要创建可选参数,你的函数必须看起来像这样: def function(x = 0): 有了这个,你可以选择 x 使用参数的值,但是如果你通过说 function() 来调用函数,X 会自动分配给0.记住,x必须在参数中自己设置,不能和其他参数混在一起。

于 2013-02-15T12:10:13.330 回答