You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I am thinking of a construct to make initialization of large, complex structures with named members easier. Some ideas:
with expression
class Config {
var name: string;
var size: int;
var doMore: bool;
var extraThings: Array<int>;
}
def x = Config.new() with {
name = "foo";
size = 44;
doMore = false;
extraThings = [88, 99, 1000];
};
The idea of the with expression is that it takes an expression on the left and applies the updates to the fields given in the curlies { ... }. For class types with mutable members, it takes an object, mutates the original object and returns it. For tuples, data types, or ADTs, it would create a new value with the updated fields.
It allows for having lots of parameters via a config object:
class Args { ... }
def m(x: Args) {
...
}
var r1 = m(Args.new() with { name = "string"; size = 66; });
// or, eliding the .new():
var r2 = m(Args with {name = "myname"; size = 777; });
with
expressionThe idea of the
with
expression is that it takes an expression on the left and applies the updates to the fields given in the curlies{ ... }
. For class types with mutable members, it takes an object, mutates the original object and returns it. For tuples, data types, or ADTs, it would create a new value with the updated fields.It allows for having lots of parameters via a config object:
Wdyt?
Originally posted by @titzer in #122 (comment)
The text was updated successfully, but these errors were encountered: