我在 Rust 中有以下代码,我想将其翻译成 Java,因此我需要首先理解代码。
pub struct SimpleSelector {
pub tag_name: Option<String>,
pub id: Option<String>,
pub class: Vec<String>,
}
impl Selector {
pub fn specificity(&self) -> Specificity {
// http://www.w3.org/TR/selectors/#specificity
let Selector::Simple(ref simple) = *self;
let a = simple.id.iter().len();
let b = simple.class.len();
let c = simple.tag_name.iter().len();
(a, b, c)
}
}
我在这行代码中遇到问题:
let a = simple.id.iter().len();
最佳答案
如果Option<String>
有一个值,那么它的迭代器将有一个要迭代的元素。
如果Option<String>
没有值,那么它的迭代器将有 0 个元素要迭代。
换句话说 a
在let a = simple.id.iter().len();
是 simple.id
中的元素数,如果有 id,则为 1;如果没有,则为 0。
(len
的实际计算发生在Item.size_hint
中,你可以看到它的来源here)。
如果是 Java,您可以使用 null
, 如
public class SimpleSelector {
public String tag_name;
public String id;
public ArrayList<String> clazz;
}
// ...
int a = id == null ? 0 : 1;
或Optional来自 Java 8,如
public class SimpleSelector {
public Optional<String> tag_name;
public Optional<String> id;
public ArrayList<String> clazz;
}
// ...
int a = id.empty() ? 0 : 1;
关于java - Java 中 Rust 的 Option::iter 的等价物是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27461750/