匹配声明

您好,欢迎来到 GDScript 基础教程系列。
在这一集中,我将回顾 Godot GDScript 中的匹配语句编码。

什么是匹配语句?

match 语句,就像 case 语句一样,是一种选择控制机制,用于允许变量或表达式的值在 search 和 map 中改变程序执行的控制流。
基本上,您使用一个变量来“匹配”一个模式并在 match 语句中执行代码。

  1. # Example of a match statement chain
  2. var health: int = 1
  3. match x:
  4. 1:
  5. # If health == 1, run this block of code
  6. _:
  7. # If nothing matches, run this block of code

匹配模式的类型

  • 恒定模式
  • 可变模式
  • 通配符模式
  • 绑定模式
  • 阵列模式
  • 字典模式
  • 多种模式

    恒定模式

    常量模式是当您使用原始/文字数据类型时。
    这些将包括整数、浮点数、布尔值、字符串等。
    匹配字符串值时,请记住它们区分大小写。 ```swift var health: int = 1

match health: 1:

  1. # Constant Pattern Block
  2. "Hello":
  3. # Constant Pattern Block
  4. 2.03:
  5. # Constant Pattern Block
  6. true:
  7. # Constant Pattern Block
  1. <a name="Q3umY"></a>
  2. ### 可变模式
  3. 使用 GDScript,您可以使用变量作为匹配模式。
  4. ```swift
  5. var health: int = 1
  6. var matchPatternOne: int = 1
  7. match x:
  8. matchPatternOne:
  9. # Variable Pattern Block

通配符模式

通配符模式是当您使用下划线符号作为匹配模式时_。
当您想要匹配所有内容时,您可以使用通配符模式。
它也可以被认为是一个“默认”块语句,这意味着它会在所有其他匹配模式失败时始终运行。
由于匹配模式按时间顺序运行,因此最好使用通配符模式作为匹配语句链中的最后一个模式。

var health: int = 1

match x:
    _:
        # Wildcard Pattern Block will always run when everything fails

绑定模式

绑定模式就像通配符模式一样捕获所有内容。不同之处在于绑定模式将获取的值分配给可以在绑定模式匹配块内使用的变量。

var health: int = 1

match x:
    var matchValue:
        # Binding Pattern Block, matchValue will equal the match variable
        # matchValue = x

阵列模式

您可以使用数组作为匹配模式。
数组中的每个元素本身就是一个匹配模式。
您还可以在数组中使用子模式。是..一个子模式。使用..使数组成为开放式数组。
数组模式通过以下方式进行测试:

  1. 测试数组的长度。如果数组长度不同,则匹配失败。除非你使用..子模式。
  2. 匹配数组根据数组模式进行测试。如果单个元素不同,则模式失败。 ```swift var health: int = [1,2,3]

match x: []:

    # only an empty array will match
[1,2]:
    # An array of only [1,2] will match
[1,2,..]:
    # An array with the first and second elements being [1,2] will match
    # The array can have any other value after the third element and still match
<a name="uKewZ"></a>
### 字典模式
字典模式用于针对字典进行测试。<br />..也可以使用子模式,例如。<br />字典模式通过以下方式进行测试:

1. 测试字典的长度。如果字典长度不同,则匹配失败。除非你使用..子模式。
1. 测试键和值。如果单个元素不同,则模式失败。
```swift
var health: int = {"key": "value", "key2", "value2"}

match x:
    {}:
        # only an empty dictionary will match
    {"key": "value"}:
        # A dictionary of {"key": "value"} will match
    {"key": "value", ..}:
        # A dictionary of {"key": "value"} will match followed by another key/value pair

多种模式

您可以指定多个模式,只要它们用逗号分隔即可:

var health: int = 3

match x:
    1,2,3,4,5:
        # Matches any variable that has an integer in the range of 1-5