Re: [Vala] Confusing closure behavior
- From: Al Thomas <astavale yahoo co uk>
- To: vala-list <vala-list gnome org>
- Subject: Re: [Vala] Confusing closure behavior
- Date: Mon, 8 Apr 2019 22:31:04 +0000 (UTC)
> On Monday, 8 April 2019, 23:01:05 BST, Vivien Kraus <vivien planete-kraus eu> wrote:
I have come across this weird closure thing. In other programming
languages, I would expect the closure in t to have a copy of i, but it
only has a reference. Is it expected?
That's an interesting question!
If you want a copy then pass it as an argument. If you want to usea variable from the enclosing scope then
use a closure, but bewareif it changes in the enclosing scope it will change in the closure.
That was my initial thought. Kind of made sense until I read you expected other programming languages to make
a copy.
If you look at the C code generated, use --ccode with valac, youwill see a struct, _data, is created to hold
the enclosed variables.It makes sense then that i, although a value type, is a reference.
Now there are some rough edges with how Vala handles value typesin
generics:https://gitlab.gnome.org/GNOME/vala/issues/564https://gitlab.gnome.org/GNOME/vala/merge_requests/52
If you think there is also a problem with closures then head overto
https://gitlab.gnome.org/GNOME/vala/issues and make your case.
Al
public delegate void Thunk();
public static void run (Thunk t) {
t ();
}
int main() {
int i = 0;
Thunk t = () => {
stdout.printf ("%d = 0, right?\n", i);
};
i = 1;
run (t);
return 0;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]