我正在使用一些返回字节的 API,我可以通过定义它们的类型来反序列化这些字节。
result: (f64, f64, f64) = api.call();
我可以通过动态传递元素数量的值 n 来实现相同的功能吗?
元组的所有元素都具有相同的类型。我想做这样的事情:
result: tuple(f64, 3) = api.call();
这里是调用函数的API。
编辑: 以防将来有人遇到这个问题。我可以通过采用这个解决方案来反序列化输出。
供参考:
call()
返回Result<D: Detokenize, _>
。 Detokenize
主要针对所有实现 T
的
Tokenizable
实现。
这里列出了所有可以接收结果的类型。 请注意,除了各种大小的元组之外,它还实现用于:
impl<T: TokenizableItem + Clone, const N: usize> Tokenizable for [T; N]
此外,请注意,它是一个带有
async
的
Result
函数,这意味着您必须 await
它并处理潜在的错误。所以你应该(tm)能够写:
result: [f64; 3] = api.call().await.unwrap();
当然,在实际项目中,我建议用一些适当的错误处理来替换
unwrap()
。
免责声明:我不知道如何使用其余的ethers-core
,所以我无法在测试项目中验证这一点。此信息纯粹来自文档。
静态与动态尺寸[f64; 3]
要求您在编译时知道元素的数量。
请注意,另一个Tokenizable
是
Vec<T>
,这意味着您还可以指定 Vec<T>
作为结果类型。然后,该长度将在运行时解析,具体取决于 T
返回的 api.call()
的元素数量。
更多背景信息如果你想表示一种类型的重复,那么
数组就是你真正想要的。它被定义为一种类型 T 重复 N 次:[T; N]
。