digitalmars.D.learn - parse int error
- Peter Eisenhower (8/8) Oct 29 2013 I am confused as to why I cannot pass the return of the tag
- Peter Eisenhower (5/13) Oct 29 2013 This is the compile error
- Jonathan M Davis (6/16) Oct 29 2013 parse takes the string by ref and removes what it's parsing from the str...
- =?UTF-8?B?QWxpIMOHZWhyZWxp?= (19/27) Oct 30 2013 A trivial wrapper makes it convenient:
- Peter Eisenhower (2/32) Nov 03 2013 Thanks
I am confused as to why I cannot pass the return of the tag attribute directly into the parse int. // This works string s = xml.tag.attr["key"]; int key = parse!int(s); // Compile error on these int key = parse!int(xml.tag.attr["key"]); int key = parse!int(cast(string) cml.tag.attr["key"]);
Oct 29 2013
On Wednesday, 30 October 2013 at 01:02:45 UTC, Peter Eisenhower wrote:I am confused as to why I cannot pass the return of the tag attribute directly into the parse int. // This works string s = xml.tag.attr["key"]; int key = parse!int(s); // Compile error on these int key = parse!int(xml.tag.attr["key"]); int key = parse!int(cast(string) cml.tag.attr["key"]);This is the compile error Error: template instance std.conv.parse!(int,const(immutable(char)[])) error instantiating
Oct 29 2013
On Wednesday, October 30, 2013 02:02:40 Peter Eisenhower wrote:I am confused as to why I cannot pass the return of the tag attribute directly into the parse int. // This works string s = xml.tag.attr["key"]; int key = parse!int(s); // Compile error on these int key = parse!int(xml.tag.attr["key"]); int key = parse!int(cast(string) cml.tag.attr["key"]);parse takes the string by ref and removes what it's parsing from the string, so it can't be a temporary. It has to be an lvalue. Also, casting results in an rvalue. To use parse, you should generally be using a local variable for the string. - Jonathan M Davis
Oct 29 2013
On 10/29/2013 06:02 PM, Peter Eisenhower wrote:I am confused as to why I cannot pass the return of the tag attribute directly into the parse int. // This works string s = xml.tag.attr["key"]; int key = parse!int(s); // Compile error on these int key = parse!int(xml.tag.attr["key"]); int key = parse!int(cast(string) cml.tag.attr["key"]);A trivial wrapper makes it convenient: import std.xml; import std.conv; T getAttr(T)(DocumentParser xml, string attrName) { string s = xml.tag.attr[attrName]; T attr = parse!T(s); return attr; } unittest { auto xml = new DocumentParser(`<test key="1"></test>`); auto key = xml.getAttr!int("key"); assert(key == 1); } void main() {} Ali
Oct 30 2013
On Wednesday, 30 October 2013 at 18:19:13 UTC, Ali Çehreli wrote:On 10/29/2013 06:02 PM, Peter Eisenhower wrote:ThanksI am confused as to why I cannot pass the return of the tag attribute directly into the parse int. // This works string s = xml.tag.attr["key"]; int key = parse!int(s); // Compile error on these int key = parse!int(xml.tag.attr["key"]); int key = parse!int(cast(string) cml.tag.attr["key"]);A trivial wrapper makes it convenient: import std.xml; import std.conv; T getAttr(T)(DocumentParser xml, string attrName) { string s = xml.tag.attr[attrName]; T attr = parse!T(s); return attr; } unittest { auto xml = new DocumentParser(`<test key="1"></test>`); auto key = xml.getAttr!int("key"); assert(key == 1); } void main() {} Ali
Nov 03 2013