我正在编写一个库,在其中我需要提供许多函数或方法来提供操作。例如,其中一个操作是计算给定值的余弦。所以我会写这样的东西:
fn cos<T>(value: &MyValue<T>) -> MyValue<T> {
todo!()
}然后,我就可以把它叫做let result = cos(&my_value)。
是否有一种方法或最佳实践,以便我也可以提供类似let result = my_value.cos()的API,而不必编写cos函数两次?我一直在考虑创建自己的宏来实现这个功能,但是我想知道是否有另一个库提供了这个特性,或者是否有更好的方法来做到这一点。
发布于 2022-08-16 16:36:32
可以通过调用方法实现中的函数来做到这一点,如下所示:
fn cos<T>(val: &MyValue<T>) -> MyValue<T> {
// snip
}
struct MyValue<T> {
// snip
}
impl<T> MyValue<T> {
fn cos(&self) -> Self {
cos(self)
}
}尽管如此,我不确定您为什么要这样做--正如其他人指出的那样,标准库只在这种情况下提供方法。这可能被视为违反了最小惊讶原则。
https://stackoverflow.com/questions/73376881
复制相似问题