Executando verificação de segurança...
1

Muito obrigado pelo comentário! Obrigado também pelo apontamento. Sou novo no Rust e não conheço bem esses iterators, mas vou ficar ligado agora.

Não entendi bem como eu usaria o next() infinitamente, entretanto consegui remover o collect() e manter o funcionamento esperado.

Sobre a segunda evolução: pelo que pesquisei, o programa echo não lê o stdin e por isso não tem como passar arquivos para ele (a não ser que converta para string e passe como argumento). Também achei interessante, todavia deixaria para uma futura implementação do cat teste.txt, por exemplo.

Carregando publicação patrocinada...
1

Sou novo no Rust e não conheço bem esses iterators, mas vou ficar ligado agora.

Em Rust não sei como eles funcionam, mas já sofri muito com eles em C++, acredito que seja semelhante.

Não entendi bem como eu usaria o next() infinitamente

o next() sempre retorna o próximo elemento. um pseudocódigo ficaria assim:

fn main() {
    let mut args: Args = env::args();

    args.next(); // para remover o primeiro elemento
    
    let mut arg: String = args.next();

    let is_help_needed = arg == null || arg == "-h" || arg == "--help"
    if is_help_needed {
        println!("Example: eco-rs Bom dia!");
        exit(0);
    }

    do {
        output.push_str(&format!("{arg} "));
    while(arg = args.next())
        
    println!("{}", output.trim());
}

PS: não entendo de rust, o código pode estar incorreto, mas a intenção é essa.

PS2: não sei se no rust essa solução teria um ganho de desempenho, teria que fazer um teste de benchmarking. Estou questionando para você verificar isso.

Sobre a segunda evolução: pelo que pesquisei, o programa echo não lê o stdin e por isso não tem como passar arquivos para ele

A minha sugestão seria algo como:

if (args.len == 1 && fileExists(args[0])){
    printFile(args)
} else {
    printArgs(args)
}
4