gpt4 book ai didi

java - 等同于 Java 中 Rust 的 match 语句

转载 作者:行者123 更新时间:2023-11-29 08:24:05 25 4
gpt4 key购买 nike

下面的代码我基本能看懂,但请告诉我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());
}

最佳答案

此代码(具体来说,称为匹配臂)包含三个相关部分:cif 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 an Option whose value is a Some, and that the contents of that Some should be bound to a variable x.

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com