>>         printers[i] = () { write(i); };
>
> I know it looks silly but if you make that:
>
>          printers[i] = (int i) { return () { write(i); }; }(i);
>
> it will do what you want.
Or, the slightly prettier (imo)
           printers[i] = ((i) => () => write(i))(i);
Or, if you need to force it to return void:
           printers[i] = ((i) => {write(i);})(i);