match_with_pattern_guards.gd 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. var global := 0
  2. func test():
  3. var a = 0
  4. var b = 1
  5. match a:
  6. 0 when b == 0:
  7. print("does not run" if true else "")
  8. 0 when b == 1:
  9. print("guards work")
  10. _:
  11. print("does not run")
  12. match a:
  13. var a_bind when b == 0:
  14. prints("a is", a_bind, "and b is 0")
  15. var a_bind when b == 1:
  16. prints("a is", a_bind, "and b is 1")
  17. _:
  18. print("does not run")
  19. match a:
  20. var a_bind when a_bind < 0:
  21. print("a is less than zero")
  22. var a_bind when a_bind == 0:
  23. print("a is equal to zero")
  24. _:
  25. print("a is more than zero")
  26. match [1, 2, 3]:
  27. [1, 2, var element] when element == 0:
  28. print("does not run")
  29. [1, 2, var element] when element == 3:
  30. print("3rd element is 3")
  31. match a:
  32. _ when b == 0:
  33. print("does not run")
  34. _ when b == 1:
  35. print("works with wildcard too.")
  36. _:
  37. print("does not run")
  38. match a:
  39. 0, 1 when b == 0:
  40. print("does not run")
  41. 0, 1 when b == 1:
  42. print("guard with multiple patterns")
  43. _:
  44. print("does not run")
  45. match a:
  46. 0 when b == 0:
  47. print("does not run")
  48. 0:
  49. print("regular pattern after guard mismatch")
  50. match a:
  51. 1 when side_effect():
  52. print("should not run the side effect call")
  53. 0 when side_effect():
  54. print("will run the side effect call, but not this")
  55. _:
  56. assert(global == 1)
  57. print("side effect only ran once")
  58. func side_effect():
  59. print("side effect")
  60. global += 1
  61. return false