在参数位置使用`impl <T> From <T> for Option <T>`是不是惯用的?

Tim*_*ann 6 rust

这个特性从1.12.0开始实现:

impl<T> From<T> for Option<T> {
    fn from(val: T) -> Option<T> {
        Some(val)
    }
}
Run Code Online (Sandbox Code Playgroud)

作为一个论点,这是多么惯用?考虑这个例子:

fn do_things(parameters: &Foo, optional_argument: impl Into<Option<Duration>>) {
    let optional_argument = optional_argument.into();
    // use it...
}
Run Code Online (Sandbox Code Playgroud)

如果你看到文档,它(或多或少)清楚(如果你知道,这个特性已经实现).但是如果你看到代码,你可能会感到困惑:

do_things(params, Duration::from_millis(100));
Run Code Online (Sandbox Code Playgroud)

这样可以使用还是应该避免?

Kor*_*nel 1

这种模式并不常见,但相当容易理解。如果它在您的库的使用上下文中很方便,那么应该没问题。

我认为它具有更常见的do_stuff功能do_stuff_with_timeout。