- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
下面的代码我基本能看懂,但请告诉我Java中的意思或等价物
while !self.eof() {
match self.next_char() {
'#' => {
self.consume_char();
selector.id = Some(self.parse_identifier());
}
'.' => {
self.consume_char();
selector.class.push(self.parse_identifier());
}
'*' => {
// universal selector
self.consume_char();
}
c if valid_identifier_char(c) => {
selector.tag_name = Some(self.parse_identifier());
}
_ => break
}
}
这段代码的用途是什么?
c if valid_identifier_char(c) => {
selector.tag_name = Some(self.parse_identifier());
}
最佳答案
此代码(具体来说,称为匹配臂)包含三个相关部分:c
、if valid_identifier_char(c)
和 block { selector.tag_name ...
c
是模式:也就是说,它告诉编译器匹配什么值,以及如何解构它们。之前的所有 ARM 都使用文字模式,因此它们只是与特定字符匹配,不会捕获任何内容。 这个模式有一个变量绑定(bind)c
,这意味着它将匹配任何,并且它匹配的任何东西都应该绑定(bind)到一个变量c
。
As an aside: you can have patterns like:
Some(x)
, which indicate that the arm should match anOption
whose value is aSome
, and that the contents of thatSome
should be bound to a variablex
.
if ...
被称为条件保护。所做的只是对 ARM 施加额外的限制。这样一来,不管匹配的模式和值,整个 ARM 都不能匹配除非条件计算为true
.因此,虽然模式 c
将匹配任何值,但作为一个整体的 arm 将不匹配,除非 valid_identifier_char(c)
也 计算为 真
。
最后,该 block 只是 ARM 匹配时将执行的代码。
我不太喜欢 Java,但我相信代码大致等同于:
// Actually should be "unsigned long", but Java.
long _temp = this.next_char();
switch _temp {
case 35:
// First branch...
break;
case 46:
// Second branch...
break;
case 42:
// Third branch...
break;
default:
long c = _temp;
if valid_identifier_char(c) {
// Fourth branch...
} else {
// Final branch...
}
break;
}
但是,一般来说,match
表达式并不总是很好地映射到开关,尤其是如果它们进行复杂的解构。
关于java - 等同于 Java 中 Rust 的 match 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27457820/
判断这2个相似的Uris实际上相同的标准方法是什么? var a = new Uri("http://sample.com/sample/"); var b = new Uri("http://sam
这个问题在这里已经有了答案: Why does "true" == true show false in JavaScript? (5 个答案) 关闭 5 年前。 可能我很困惑,但我无法理解这个愚蠢
我是一名优秀的程序员,十分优秀!