Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is it possible to modify the reference of an argument in Dart?

Not sure if the terminology in the title is 100% correct, but what I mean is easily illustrated by this example:

class MyClass{
  String str = '';  
  MyClass(this.str);
}


void main() {
  MyClass obj1 = MyClass('obj1 initial');

  print(obj1.str);

  doSomething(obj1);  
  print(obj1.str);

  doSomethingElse(obj1);
  print(obj1.str);
}



void doSomething(MyClass obj){
  obj.str = 'obj1 new string';
}

void doSomethingElse(MyClass obj){
  obj = MyClass('obj1 new object');
}

This will print

obj1 initial
obj1 new string
obj1 new string

But what if I wanted doSomethingElse() to actually modify what obj1 is referencing, so that the output would be:

obj1 initial
obj1 new string
obj1 new object

Is this possible in Dart, and if so, how?

like image 623
Magnus Avatar asked Mar 21 '19 09:03

Magnus


1 Answers

No, Dart does not pass arguments by reference. (Without something like C++'s complex type system and rules, it's not clear how it would work if the caller didn't bind the argument to a variable.)

You instead could add a level of indirection (i.e., by putting obj1 inside another object, such as a List, Map, or your own class). Another possibility would be to make doSomethingElse a nested function, and then it could directly access and modify variables in the enclosing scope.

like image 113
jamesdlin Avatar answered Oct 11 '22 01:10

jamesdlin