digitalmars.D.learn - Set global immutables from main/getopt?
- Andrew Klaassen (26/26) Jan 28 2014 I thought it'd be a good idea to set global immutables from args
- Stanislav Blinov (4/4) Jan 28 2014 On Tuesday, 28 January 2014 at 17:11:43 UTC, Andrew Klaassen
- Steven Schveighoffer (6/9) Jan 28 2014 That being said, it *could* be done, since the runtime has access to the...
- Stanislav Blinov (3/11) Jan 28 2014 Ahem. There was a link to dpaste :D
- Steven Schveighoffer (6/17) Jan 28 2014 Oops! I glossed over that :) I thought the example just showed how a
- =?UTF-8?B?QWxpIMOHZWhyZWxp?= (5/16) Jan 28 2014 On a side note, dpaste is not associated with newsgroups. It can
- Stanislav Blinov (5/9) Jan 28 2014 Awww, but it is so much more convenient. No spurious linebreaks,
- Andrew Klaassen (18/27) Jan 28 2014 Cutting and pasting for posterity... :-)
- Stanislav Blinov (5/8) Jan 28 2014 Initialization of immutable globals is actually in the docs:
- Meta (4/13) Jan 28 2014 You can also use the Github Gist feature for displaying code,
- Stanislav Blinov (2/4) Jan 29 2014 But you'd need a github account for that, won't you? :)
- anonymous (3/7) Jan 29 2014 no
- Dicebot (3/3) Jan 29 2014 One can always turn global into pointer to immutable - it will
I thought it'd be a good idea to set global immutables from args passed to main(). When I do this: import io = std.stdio; immutable string abc; void foo() { io.writeln(abc); } void main(string[] args) { abc = args[1]; foo(); } ...I get the compiler error: "Error: can only initialize const member abc inside constructor". When I do this: import io = std.stdio; void foo() { io.writeln(abc); } void main(string[] args) { immutable string abc = args[1]; foo(); } ...I get the compiler error: "Error: undefined identifier abc". Is there any workaround, or am I attempting a stupidity/impossibility? Thanks. Andrew
Jan 28 2014
On Tuesday, 28 January 2014 at 17:11:43 UTC, Andrew Klaassen wrote: Naturally, initialize them in constructor :) http://dpaste.dzfl.pl/620e8c61
Jan 28 2014
On Tue, 28 Jan 2014 12:27:02 -0500, Stanislav Blinov <stanislav.blinov gmail.com> wrote:On Tuesday, 28 January 2014 at 17:11:43 UTC, Andrew Klaassen wrote: Naturally, initialize them in constructor :) http://dpaste.dzfl.pl/620e8c61That being said, it *could* be done, since the runtime has access to the command line args. But the runtime would have to provide access to those parameters. But you'd have to do it in a static constructor. -Steve
Jan 28 2014
On Tuesday, 28 January 2014 at 18:30:37 UTC, Steven Schveighoffer wrote:On Tue, 28 Jan 2014 12:27:02 -0500, Stanislav Blinov <stanislav.blinov gmail.com> wrote:Ahem. There was a link to dpaste :Dhttp://dpaste.dzfl.pl/620e8c61That being said, it *could* be done, since the runtime has access to the command line args. But the runtime would have to provide access to those parameters. But you'd have to do it in a static constructor.
Jan 28 2014
On Tue, 28 Jan 2014 13:41:24 -0500, Stanislav Blinov <stanislav.blinov gmail.com> wrote:On Tuesday, 28 January 2014 at 18:30:37 UTC, Steven Schveighoffer wrote:Oops! I glossed over that :) I thought the example just showed how a static constructor was required to initialize, I didn't see the access to the program args. -SteveOn Tue, 28 Jan 2014 12:27:02 -0500, Stanislav Blinov <stanislav.blinov gmail.com> wrote:Ahem. There was a link to dpaste :Dhttp://dpaste.dzfl.pl/620e8c61That being said, it *could* be done, since the runtime has access to the command line args. But the runtime would have to provide access to those parameters. But you'd have to do it in a static constructor.
Jan 28 2014
On 01/28/2014 10:41 AM, Stanislav Blinov wrote:On Tuesday, 28 January 2014 at 18:30:37 UTC, Steven Schveighoffer wrote:On a side note, dpaste is not associated with newsgroups. It can disappear at any time in the future. I like seeing and showing code in message bodies both for convenience and future availability. :) AliOn Tue, 28 Jan 2014 12:27:02 -0500, Stanislav Blinov <stanislav.blinov gmail.com> wrote:Ahem. There was a link to dpaste :Dhttp://dpaste.dzfl.pl/620e8c61That being said, it *could* be done, since the runtime has access to the command line args. But the runtime would have to provide access to those parameters. But you'd have to do it in a static constructor.
Jan 28 2014
On Tuesday, 28 January 2014 at 18:56:35 UTC, Ali Çehreli wrote:On a side note, dpaste is not associated with newsgroups. It can disappear at any time in the future. I like seeing and showing code in message bodies both for convenience and future availability. :)Awww, but it is so much more convenient. No spurious linebreaks, nice syntax highlighting, built-in compiler... :P But I agree, sometimes it's a real pain when you've searching for something and all you find is dead links.
Jan 28 2014
On Tuesday, 28 January 2014 at 19:02:41 UTC, Stanislav Blinov wrote:On Tuesday, 28 January 2014 at 18:56:35 UTC, Ali Çehreli wrote:Cutting and pasting for posterity... :-) import std.stdio; import core.runtime; immutable string abc; void main() { writeln(abc); } shared static this() { alias args = Runtime.args; if (args.length > 1) abc = args[1]; } Fascinating. Any chance someone would be able to add this to http://dlang.org/module.html as an example for people like me who'd have no clue otherwise? AndrewOn a side note, dpaste is not associated with newsgroups. It can disappear at any time in the future. I like seeing and showing code in message bodies both for convenience and future availability. :)Awww, but it is so much more convenient. No spurious linebreaks, nice syntax highlighting, built-in compiler... :P But I agree, sometimes it's a real pain when you've searching for something and all you find is dead links.
Jan 28 2014
On Tuesday, 28 January 2014 at 20:07:25 UTC, Andrew Klaassen wrote:Fascinating. Any chance someone would be able to add this to http://dlang.org/module.html as an example for people like me who'd have no clue otherwise?Initialization of immutable globals is actually in the docs: http://dlang.org/const3.html. It's a third example in "Immutable Storage Class". ;)
Jan 28 2014
On Tuesday, 28 January 2014 at 19:02:41 UTC, Stanislav Blinov wrote:On Tuesday, 28 January 2014 at 18:56:35 UTC, Ali Çehreli wrote:You can also use the Github Gist feature for displaying code, can't you?On a side note, dpaste is not associated with newsgroups. It can disappear at any time in the future. I like seeing and showing code in message bodies both for convenience and future availability. :)Awww, but it is so much more convenient. No spurious linebreaks, nice syntax highlighting, built-in compiler... :P But I agree, sometimes it's a real pain when you've searching for something and all you find is dead links.
Jan 28 2014
On Wednesday, 29 January 2014 at 00:28:29 UTC, Meta wrote:You can also use the Github Gist feature for displaying code, can't you?But you'd need a github account for that, won't you? :)
Jan 29 2014
On Wednesday, 29 January 2014 at 10:15:03 UTC, Stanislav Blinov wrote:On Wednesday, 29 January 2014 at 00:28:29 UTC, Meta wrote:noYou can also use the Github Gist feature for displaying code, can't you?But you'd need a github account for that, won't you? :)
Jan 29 2014
One can always turn global into pointer to immutable - it will preserve most benefits but can be always replaced with differently initialized one.
Jan 29 2014