Cast from object array to object and then back
BlitzMax Forums/BlitzMax Programming/Cast from object array to object and then back
| ||
This is a bit esoteric, but it intrigued me:Local strings$[]=["hi","yo"] Local arr:Object[] arr=Object[](strings) If arr Print "1" o:Object=strings arr=Object[](o) If arr Print "2" So I start with an array of strings. If I cast that to an object array, that works fine. If I cast it to an Object, then cast that Object to an Object array, it doesn't work. The reason I want to do this is, I want to make a kind of generic object enumerator that can iterate over any collection, and I'd like to just pass in an Object to it when I make it. |
| ||
Change...o:Object=stringsto... Local o:Object[]= stringsand you get the output you're after. |
| ||
Seems casting from object to an array that is a superclass of the array type doesn't work. String[](o) works, however. Could've sworn this worked previously.. |
| ||
Glad I'm not talking gibberish, Noel. So is it likely to be a bug? To be honest, I won't bother mark if it is, because I can't imagine seriously needing to do this. |
| ||
I don't think it's really a bug, just a sort of odd case. I'm thinking you might be able to modify ObjectDowncast (blitz_object.c) to handle arrays this way, but I'm not really sure since it should already work if it were using that to cast from an object to an array. |
| ||
A quick look at blitz_array.c suggests that bbArrayCastFromObject compares type names as strings, whereas bbObjectDowncast compares type pointers. There doesn't seem to be a trivial fix. Since Object[](String[](o)) works, it'd be consistent for Object[](o) to work too. |