lambdas.gd 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. extends Node
  2. var lambda_member1 := func(alpha: int, beta): return alpha + beta
  3. # | | | | | | | | ^^^^ -> \1:beta
  4. # | | | | | | ^^^^^ -> \1:alpha
  5. # | | | | ^^^^ \1:beta -> \1:beta
  6. # | | ^^^^^ \1:alpha -> \1:alpha
  7. # ^^^^^^^^^^^^^^ \1 -> \1
  8. var lambda_member2 := func(alpha, beta: int) -> int:
  9. # | | | | | |
  10. # | | | | | |
  11. # | | | | ^^^^ \2:beta -> \2:beta
  12. # | | ^^^^^ \2:alpha -> \2:alpha
  13. # ^^^^^^^^^^^^^^ \2 -> \2
  14. return alpha + beta
  15. # | | ^^^^ -> \2:beta
  16. # ^^^^^ -> \2:alpha
  17. var lambda_member3 := func add_values(alpha, beta): return alpha + beta
  18. # | | | | | | | | ^^^^ -> \3:beta
  19. # | | | | | | ^^^^^ -> \3:alpha
  20. # | | | | ^^^^ \3:beta -> \3:beta
  21. # | | ^^^^^ \3:alpha -> \3:alpha
  22. # ^^^^^^^^^^^^^^ \3 -> \3
  23. var lambda_multiline = func(alpha: int, beta: int) -> int:
  24. # | | | | | |
  25. # | | | | | |
  26. # | | | | ^^^^ \multi:beta -> \multi:beta
  27. # | | ^^^^^ \multi:alpha -> \multi:alpha
  28. # ^^^^^^^^^^^^^^^^ \multi -> \multi
  29. print(alpha + beta)
  30. # | | ^^^^ -> \multi:beta
  31. # ^^^^^ -> \multi:alpha
  32. var tmp = alpha + beta + 42
  33. # | | | | ^^^^ -> \multi:beta
  34. # | | ^^^^^ -> \multi:alpha
  35. # ^^^ \multi:tmp -> \multi:tmp
  36. print(tmp)
  37. # ^^^ -> \multi:tmp
  38. if tmp > 50:
  39. # ^^^ -> \multi:tmp
  40. tmp += alpha
  41. # | ^^^^^ -> \multi:alpha
  42. #<^ -> \multi:tmp
  43. else:
  44. tmp -= beta
  45. # | ^^^^ -> \multi:beta
  46. #<^ -> \multi:tmp
  47. print(tmp)
  48. # ^^^ -> \multi:tmp
  49. return beta + tmp + alpha
  50. # | | | | ^^^^^ -> \multi:alpha
  51. # | | ^^^ -> \multi:tmp
  52. # ^^^^ -> \multi:beta
  53. var some_name := "foo bar"
  54. # ^^^^^^^^^ member:some_name -> member:some_name
  55. func _ready() -> void:
  56. var a = lambda_member1.call(1,2)
  57. # ^^^^^^^^^^^^^^ -> \1
  58. var b = lambda_member2.call(1,2)
  59. # ^^^^^^^^^^^^^^ -> \2
  60. var c = lambda_member3.call(1,2)
  61. # ^^^^^^^^^^^^^^ -> \3
  62. var d = lambda_multiline.call(1,2)
  63. # ^^^^^^^^^^^^^^^^ -> \multi
  64. print(a,b,c,d)
  65. var lambda_local = func(alpha, beta): return alpha + beta
  66. # | | | | | | | | ^^^^ -> \local:beta
  67. # | | | | | | ^^^^^ -> \local:alpha
  68. # | | | | ^^^^ \local:beta -> \local:beta
  69. # | | ^^^^^ \local:alpha -> \local:alpha
  70. # ^^^^^^^^^^^^ \local -> \local
  71. var value := 42
  72. # ^^^^^ local:value -> local:value
  73. var lambda_capture = func(): return value + some_name.length()
  74. # | | | | ^^^^^^^^^ -> member:some_name
  75. # | | ^^^^^ -> local:value
  76. # ^^^^^^^^^^^^^^ \capture -> \capture
  77. var z = lambda_local.call(1,2)
  78. # ^^^^^^^^^^^^ -> \local
  79. var x = lambda_capture.call()
  80. # ^^^^^^^^^^^^^^ -> \capture
  81. print(z,x)