mirror of
https://github.com/godotengine/godot.git
synced 2026-01-03 18:11:19 +03:00
Merge pull request #80085 from vnen/gdscript-pattern-guards
GDScript: Implement pattern guards for match statement
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
var global := 0
|
||||
|
||||
func test():
|
||||
var a = 0
|
||||
var b = 1
|
||||
|
||||
match a:
|
||||
0 when b == 0:
|
||||
print("does not run" if true else "")
|
||||
0 when b == 1:
|
||||
print("guards work")
|
||||
_:
|
||||
print("does not run")
|
||||
|
||||
match a:
|
||||
var a_bind when b == 0:
|
||||
prints("a is", a_bind, "and b is 0")
|
||||
var a_bind when b == 1:
|
||||
prints("a is", a_bind, "and b is 1")
|
||||
_:
|
||||
print("does not run")
|
||||
|
||||
match a:
|
||||
var a_bind when a_bind < 0:
|
||||
print("a is less than zero")
|
||||
var a_bind when a_bind == 0:
|
||||
print("a is equal to zero")
|
||||
_:
|
||||
print("a is more than zero")
|
||||
|
||||
match [1, 2, 3]:
|
||||
[1, 2, var element] when element == 0:
|
||||
print("does not run")
|
||||
[1, 2, var element] when element == 3:
|
||||
print("3rd element is 3")
|
||||
|
||||
match a:
|
||||
_ when b == 0:
|
||||
print("does not run")
|
||||
_ when b == 1:
|
||||
print("works with wildcard too.")
|
||||
_:
|
||||
print("does not run")
|
||||
|
||||
match a:
|
||||
0, 1 when b == 0:
|
||||
print("does not run")
|
||||
0, 1 when b == 1:
|
||||
print("guard with multiple patterns")
|
||||
_:
|
||||
print("does not run")
|
||||
|
||||
match a:
|
||||
0 when b == 0:
|
||||
print("does not run")
|
||||
0:
|
||||
print("regular pattern after guard mismatch")
|
||||
|
||||
match a:
|
||||
1 when side_effect():
|
||||
print("should not run the side effect call")
|
||||
0 when side_effect():
|
||||
print("will run the side effect call, but not this")
|
||||
_:
|
||||
assert(global == 1)
|
||||
print("side effect only ran once")
|
||||
|
||||
func side_effect():
|
||||
print("side effect")
|
||||
global += 1
|
||||
return false
|
||||
@@ -0,0 +1,10 @@
|
||||
GDTEST_OK
|
||||
guards work
|
||||
a is 0 and b is 1
|
||||
a is equal to zero
|
||||
3rd element is 3
|
||||
works with wildcard too.
|
||||
guard with multiple patterns
|
||||
regular pattern after guard mismatch
|
||||
side effect
|
||||
side effect only ran once
|
||||
Reference in New Issue
Block a user