Something went wrong on our end
Select Git revision
-
andy authored
so hopefully not too much breaks). New syntax features: 1. Call-by-name function arguments. You can specify a hash literal in place of ordered function arguments, and it will become the local variable namespace for the called function, making functions with many arguments more readable. Ex: view_manager.lookat(heading:180, pitch:20, roll:0, x:X0, y:Y0, z:Z0, time:now, fov:55); Declared arguments are checked and defaulted as would be expected: it's an error if you fail to pass a value for an undefaulted argument, missing default arguments get assigned, and any rest parameter (e.g. "func(a,b=2,rest...){}") will be assigned with an empty vector. 2. Vector slicing. Vectors (lists) can now be created from others using an ordered list of indexes and ranges. For example: var v1 = ["a","b","c","d","e"] var v2 = v1[3,2]; # == ["d","c"]; var v3 = v1[1:3]; # i.e. range from 1 to 3: ["b","c","d"]; var v4 = v1[1:]; # no value means "to the end": ["b","c","d","e"] var i = 2; var v5 = v1[i]; # runtime expressions are fine: ["c"] var v6 = v1[-2,-1]; # negative indexes are relative to end: ["d","e"] The range values can be computed at runtime (e.g. i=1; v5=v1[i:]). Negative indices work the same way the do with the vector functions (-1 is the last element, -2 is 2nd to last, etc...). 3. Multi-assignment expressions. You can assign more than one variable (or lvalue) at a time by putting them in a parenthesized list: (var a, var b) = (1, 2); var (a, b) = (1, 2); # Shorthand for (var a, var b) (var a, v[0], obj.field) = (1,2,3) # Any assignable lvalue works var color = [1, 1, 0.5]; var (r, g, b) = color; # works with runtime vectors too
andy authoredso hopefully not too much breaks). New syntax features: 1. Call-by-name function arguments. You can specify a hash literal in place of ordered function arguments, and it will become the local variable namespace for the called function, making functions with many arguments more readable. Ex: view_manager.lookat(heading:180, pitch:20, roll:0, x:X0, y:Y0, z:Z0, time:now, fov:55); Declared arguments are checked and defaulted as would be expected: it's an error if you fail to pass a value for an undefaulted argument, missing default arguments get assigned, and any rest parameter (e.g. "func(a,b=2,rest...){}") will be assigned with an empty vector. 2. Vector slicing. Vectors (lists) can now be created from others using an ordered list of indexes and ranges. For example: var v1 = ["a","b","c","d","e"] var v2 = v1[3,2]; # == ["d","c"]; var v3 = v1[1:3]; # i.e. range from 1 to 3: ["b","c","d"]; var v4 = v1[1:]; # no value means "to the end": ["b","c","d","e"] var i = 2; var v5 = v1[i]; # runtime expressions are fine: ["c"] var v6 = v1[-2,-1]; # negative indexes are relative to end: ["d","e"] The range values can be computed at runtime (e.g. i=1; v5=v1[i:]). Negative indices work the same way the do with the vector functions (-1 is the last element, -2 is 2nd to last, etc...). 3. Multi-assignment expressions. You can assign more than one variable (or lvalue) at a time by putting them in a parenthesized list: (var a, var b) = (1, 2); var (a, b) = (1, 2); # Shorthand for (var a, var b) (var a, v[0], obj.field) = (1,2,3) # Any assignable lvalue works var color = [1, 1, 0.5]; var (r, g, b) = color; # works with runtime vectors too
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
gc.c 7.93 KiB