How do I use Option and the '?' operator with a for loop?
from dontblink@feddit.it to rust@lemmy.ml on 08 Nov 2024 12:01
https://feddit.it/post/12251070
from dontblink@feddit.it to rust@lemmy.ml on 08 Nov 2024 12:01
https://feddit.it/post/12251070
fn get_links(link_nodes: Select) -> Option<String> { let mut rel_permalink: Option<String> = for node in link_nodes { link = String::from(node.value().attr("href")?); return Some(link); }; Some(rel_permalink) }
This is what I’m trying to do, and I’ve been stuck with this code for an hour, I simply don’t know how to put this function togheter… Essentially I would like to take some link_nodes
and just return the link String, but I’m stuck in the use of Option with the ?
operator…
Pheraps trying to write it with match would clear things out(?)
Also I come from JavaScript in which expressions do not have their own scope, meaning I’m having troubles to understand how to get out a variable from a for loop, should I initialize the rel_permalink
variable as the for loop result?
This are the errors i get:
error[E0308]: mismatched types --> src/main.rs:55:49 | 55 | let mut rel_permalink: Option<String> = for node in link_nodes { | _________________________________________________^ 56 | | link = String::from(node.value().attr("href")?); 57 | | 58 | | return Some(link); 59 | | }; | |_________^ expected `Option<String>`, found `()` | = note: expected enum `Option<String>` found unit type `()` note: the function expects a value to always be returned, but loops might run zero times --> src/main.rs:55:49 | 55 | let mut rel_permalink: Option<String> = for node in link_nodes { | ^^^^^^^^^^^^^^^^^^^^^^ this might have zero elements to iterate on 56 | link = String::from(node.value().attr("href")?); | - if the loop doesn't execute, this value would never get returned 57 | 58 | return Some(link); | ----------------- if the loop doesn't execute, this value would never get returned = help: return a value for the case when the loop has zero elements to iterate on, or consider changing the return type to account for that possibility
threaded - newest