Search
Write a publication
Pull to refresh
0
0
Send message

Хорошая статья, но мне кажется примеры получились слишком синтетические.
Было бы хорошо видеть либо замечание, что следующему коду:

fn new_closure(msg: String) -> impl Fn(usize) -> usize {
    move |x| msg.clone().into_bytes().len() * x
}

нет необходимости создавать копию строки на каждый вызов замыкания, т.к. можно получить len и с оригинального msg.

И код, скорее всего, должен выглядеть так:

fn new_closure(msg: String) -> impl Fn(usize) -> usize {
    move |x| msg.len() * x
}

Либо можно привести другой пример, где clone действительно имеет смысл, допустим:

fn new_closure(msg: String) -> impl Fn(&str) -> String {
    move |msg2| msg.clone() + msg2
}

в данном случае просто удалить clone не получится, не переписав код на format!("{msg}{msg2}") или что-то другое.

P.S. Статья полезная, просто хотелось напомнить, что примеры из статей, комментариев, обсуждений нужны не для для того, чтобы их использовать/копировать в неизменном виде

Information

Rating
Does not participate
Registered
Activity