gpt4 book ai didi

rust - 如何将动态数量的类型化参数传递给函数?

转载 作者:行者123 更新时间:2023-11-29 08:04:20 24 4
gpt4 key购买 nike

假设我想为 HTTP API 编写一个小客户端。它有一个返回汽车列表的资源:

GET /cars

它还接受两个可选的查询参数 colormanufacturer ,这样我就可以查询特定的汽车,例如:

GET /cars?color=black
GET /cars?manufacturer=BMW
GET /cars?color=green&manufacturer=VW

我如何在 Rust 中正确公开这些资源?由于 Rust 不支持重载,定义多个函数似乎是通常的方法,例如:

fn get_cars() -> Cars
fn get_cars_by_color(color: Color) -> Cars
fn get_cars_by_manufacturer(manufacturer: Manufacturer) -> Cars
fn get_cars_by_manufacturer_and_color(manufacturer: Manufacturer, color: Color) -> Cars

但是当您有多个参数时,这显然无法扩展。

另一种方法是使用结构:

struct Parameters {
color: Option<Color>,
manufacturer: Option<Manufacturer>
}

fn get_cars(params: Parameters) -> Cars

这有相同的缩放问题,每个结构字段都必须在创建时设置(即使它的值只是 None )。

我想我可以接受 HashMap<String, String> ,但这听起来也不太好。所以我的问题是,在 Rust 中执行此操作的正确/最佳方法是什么?

最佳答案

您可以使用 Builder pattern ,如前所述here .对于您的特定 API,它可能如下所示:

Cars::new_get()
.by_color("black")
.by_manufacturer("BMW")
.exec();

关于rust - 如何将动态数量的类型化参数传递给函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26555682/

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