Thread overview | |||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
June 18, 2020 About string and int spliced together. | ||||
---|---|---|---|---|
| ||||
Now dlang string processing is complex, like this: ```D import std.stdio; import std.conv; void main() { string name = "Brian"; uint age = 18; string text = "My name is " ~ name ~ " and my age is " ~ age.to!string ~ "."; writeln(text); } ``` Type should be automatically converted to string! It should be: ```D import std.stdio; void main() { string name = "Brian"; uint age = 18; string text = "My name is " ~ name ~ " and my age is " ~ age ~ "."; writeln(text); } ``` Like java: ```D String name = "Brian"; int age = 18; System.out.println("My name is " + name + " and my age is " + age + "."); ``` |
June 18, 2020 Re: About string and int spliced together. | ||||
---|---|---|---|---|
| ||||
Posted in reply to zoujiaqing | On Thursday, 18 June 2020 at 09:00:42 UTC, zoujiaqing wrote: > Type should be automatically converted to string! While this could be made to work for floating point numbers, it is ambiguous for integers since integers are often implicitly convertible to characters: writeln("AB"~67); // prints "ABC", code unit 67 represents 'C' You might be interested in Adam's string interpolation DIP though: https://github.com/dlang/DIPs/pull/186 |
June 18, 2020 Re: About string and int spliced together. | ||||
---|---|---|---|---|
| ||||
Posted in reply to zoujiaqing | On Thursday, 18 June 2020 at 09:00:42 UTC, zoujiaqing wrote: > Now dlang string processing is complex, like this: > ... > Type should be automatically converted to string! > ... > Like java: No, it shouldn't. `string` is not a class, it's simply an array of immutable chars. To an array, you can only append an implicitly convertible type, or another array. You can use [1], [2], or, for this example's sake, [3] import std.stdio; import std.conv : text; import std.format : format; void main() { string name = "Brian"; uint age = 18; string str = text("My name is ", name, " and my age is ", age, "."); writeln(str); str = format("My name is %s and my age is %s.", name, age); writeln(str); writefln("My name is %s and my age is %s.", name, age); } [1] https://dlang.org/phobos/std_conv.html#text [2] https://dlang.org/phobos/std_format.html#.format [3] https://dlang.org/phobos/std_stdio.html#.writefln |
June 18, 2020 Re: About string and int spliced together. | ||||
---|---|---|---|---|
| ||||
Posted in reply to Dennis | On Thursday, 18 June 2020 at 09:13:53 UTC, Dennis wrote:
> On Thursday, 18 June 2020 at 09:00:42 UTC, zoujiaqing wrote:
>> Type should be automatically converted to string!
>
> While this could be made to work for floating point numbers, it is ambiguous for integers since integers are often implicitly convertible to characters:
>
> writeln("AB"~67); // prints "ABC", code unit 67 represents 'C'
>
> You might be interested in Adam's string interpolation DIP though:
> https://github.com/dlang/DIPs/pull/186
Yes! You are right! Thanks!
|
June 18, 2020 Re: About string and int spliced together. | ||||
---|---|---|---|---|
| ||||
Posted in reply to zoujiaqing | On Thursday, 18 June 2020 at 09:00:42 UTC, zoujiaqing wrote: > It should be: > > ```D > import std.stdio; > > void main() > { > string name = "Brian"; > uint age = 18; > > string text = "My name is " ~ name ~ " and my age is " ~ age ~ "."; > > writeln(text); > } > ``` You can use https://dlang.org/phobos/std_conv.html#text string s = text("My name is ", name, " and my age is ", age, "."); |
June 18, 2020 Re: About string and int spliced together. | ||||
---|---|---|---|---|
| ||||
Posted in reply to Kagamin | On Thursday, 18 June 2020 at 09:44:15 UTC, Kagamin wrote:
> You can use https://dlang.org/phobos/std_conv.html#text
> string s = text("My name is ", name, " and my age is ", age, ".");
That looks actually quite nifty, I'll have to use that someday. Still it requires an import for std.conv, and when you import std.conv you might as well just to!string all the way.
Imagine if using ~ required import std.concat, I am sure it will be used more sparingly than it is now.
|
June 18, 2020 Re: About string and int spliced together. | ||||
---|---|---|---|---|
| ||||
Posted in reply to JN | On Thursday, 18 June 2020 at 10:19:25 UTC, JN wrote:
> On Thursday, 18 June 2020 at 09:44:15 UTC, Kagamin wrote:
>> You can use https://dlang.org/phobos/std_conv.html#text
>> string s = text("My name is ", name, " and my age is ", age, ".");
>
> That looks actually quite nifty, I'll have to use that someday. Still it requires an import for std.conv, and when you import std.conv you might as well just to!string all the way.
>
> Imagine if using ~ required import std.concat, I am sure it will be used more sparingly than it is now.
You can just add a "import std" at the top of your module and stop worrying about imports.
|
June 18, 2020 Re: About string and int spliced together. | ||||
---|---|---|---|---|
| ||||
Posted in reply to JN | On Thursday, 18 June 2020 at 10:19:25 UTC, JN wrote:
> On Thursday, 18 June 2020 at 09:44:15 UTC, Kagamin wrote:
>> You can use https://dlang.org/phobos/std_conv.html#text
>> string s = text("My name is ", name, " and my age is ", age, ".");
>
> That looks actually quite nifty, I'll have to use that someday. Still it requires an import for std.conv, and when you import std.conv you might as well just to!string all the way.
`text` function is shorter, it's close to interpolated string in ergonomics while not being interpolated string.
|
June 18, 2020 Re: About string and int spliced together. | ||||
---|---|---|---|---|
| ||||
Posted in reply to JN | On 6/18/20 6:19 AM, JN wrote:
> On Thursday, 18 June 2020 at 09:44:15 UTC, Kagamin wrote:
>> You can use https://dlang.org/phobos/std_conv.html#text
>> string s = text("My name is ", name, " and my age is ", age, ".");
>
> That looks actually quite nifty, I'll have to use that someday. Still it requires an import for std.conv, and when you import std.conv you might as well just to!string all the way.
age.to!string will allocate a temporary string just to throw it away. text will not do that.
-Steve
|
June 18, 2020 Re: About string and int spliced together. | ||||
---|---|---|---|---|
| ||||
Posted in reply to Steven Schveighoffer | On Thursday, 18 June 2020 at 13:59:42 UTC, Steven Schveighoffer wrote: > age.to!string will allocate a temporary string just to throw it away. text will not do that. > > -Steve Wouldn't it? https://github.com/dlang/phobos/blob/master/std/conv.d#L4193 |
Copyright © 1999-2021 by the D Language Foundation