I’m thinking that I should implement valueOf() for XML like this:
var str:String = this.toString();
var asInt:int = parseInt(str);
if(asInt.toString() == str)
        return asInt;
        
var asFloat:Number = parseFloat(str);
if(asFloat.toString() == str)
        return asFloat;

return str;

This would make XML work natively with primitives in most cases even if we 
can’t infer types:

var xml:XML = <xml name”Fred” value=“10”/>;
var name:* = xml.@name;
var value:* = xml.@value;

trace(value+5)//15
trace(name+ “ Flintstone”); //Fred Flintstone
trace(“10”+value)//“1010”
trace(value+value)//20

This will not work if we’re expecting a valid number to actually be a string. 
We could end up with arithmetic instead of string concatenation.

It will also not allow things like:
name.toLowerCase()// error
name.split(“”);//error

One hack we could do would be to add all string and number methods to XML and 
XMLLIst which would essentially call toString(). Something like this:

public function 
split(separator:*=undefined,limit:int=Number.POSITIVE_INFINITY):Array
{
        this.toString.split(separator,limit);
}

That would let XML act as if it’s a string (and number) in most cases.

Thoughts?

On Aug 4, 2016, at 5:33 PM, Alex Harui <aha...@adobe.com> wrote:

> 
> 
> On 8/4/16, 7:22 AM, "Harbs" <harbs.li...@gmail.com> wrote:
> 
>> I’m not sure how to deal with this case:
>> 
>> 
>> private var name:String;
>> 
>> this.name = someXML.@Name;
>> 
>> The above compiles to
>> 
>> this.name = someXML.attribute('Name’);
>> 
>> In Javascript this.name becomes an XMLList, but in Flash, the XMLList is
>> implicitly converted to a string.
>> 
>> Is it possible to make the compiler smarter and make the compiled version
>> look like this?
>> 
>> this.name = someXML.attribute('Name’).toString();
> 
> I will look into it.
> 
> -Alex
> 

Reply via email to