Question about custom classes and arrays
Monkey Forums/Monkey Programming/Question about custom classes and arrays| 
 | ||
| Hi.  Can someone take a peek at this and tell me why array [0] x and y come back as undefined?  Possibly a bug. Strict Import mojo Function Main:Int() Local vecArray:Vec2[] vecArray += [New Vec2(0, 1)] Print vecArray[0].x Print vecArray[0].y Return 0 End Function Class Vec2 Field x:Float Field y:Float Method New (x:Float, y:Float) Self.x = x Self.y = y End Method End Class | 
| 
 | ||
| +=??? Strict Import mojo Function Main:Int() Local vecArray:Vec2[] vecArray = [New Vec2(0, 1)] Print vecArray[0].x Print vecArray[0].y Return 0 End Function Class Vec2 Field x:Float Field y:Float Method New (x:Float, y:Float) Self.x = x Self.y = y End Method End Class | 
| 
 | ||
| ??  That doesn't add a new array.  The += has a purpose! | 
| 
 | ||
| Here, this will better explain the problem.  And the array length comes back as 15.  Which doesn't jive at all. Strict Import mojo Function Main:Int() 'for comparison Local intArray:Int[] intArray += [1] intArray += [2] Print "First value:"+intArray[0] Print "Second value:"+intArray[1] Print "intArray Length:"+intArray.Length Local vecArray:Vec2[] vecArray += [New Vec2(0, 1)] Print "vec x:"+vecArray[0].x Print "vec y:"+vecArray[0].y Print "vecArray Length:"+vecArray.Length Return 0 End Function Class Vec2 Field x:Float Field y:Float Method New (x:Float, y:Float) Self.x = x Self.y = y End Method End Class | 
| 
 | ||
| EDIT: Oh, hang on you posted a new example while I was typing -- lemme see... | 
| 
 | ||
| Is... intArray += [2]...supposed to be shorthand for... intArray.Resize( intArray.Length()+1 ) intArray[intArray.Length()-1]=2...? I didn't know you were supposed to be able to use the += operator with arrays, but I'd suggest that a stack might be more appropriate as you can just add new entries and retrieve by index. EDIT: I see the discrepancy with classes BTW -- having a faff around now. | 
| 
 | ||
| Yep it is short-hand for that.  Stack?  You mean List? And was Void taken out? I'm getting a syntax error that it doesn't match any commands etc. | 
| 
 | ||
| Hm...calling a Method from an array isn't working either... 
vecArray[0].Update()
...
Class Vec2
   Method Update()
      ...do stuff
   End Method
End Class
 | 
| 
 | ||
| If += is documented as a valid operator for arrays then I'd run it by the bugs forum. Actually, do it anyway because the bug might be that it works with Ints! :D | 
| 
 | ||
|  Hm...calling a Method from an array isn't working either... No, it's the instantiation of the object that seems to be failing. If you explicitly create a instance in the array then you can call a Method from it (v32). | 
| 
 | ||
| Resize isn't working. Did a resize to 5 on the array and the length came back 0. Something is up. | 
| 
 | ||
| This prints 0 after the resize. Local a:Int[] Print a.Length a.Resize(10) Print a.Length | 
| 
 | ||
| Yep -- looks like that's what it all stems from. Nice find! | 
| 
 | ||
| Sorry, but there's no bug at all (just seen a post in the Bug section)... The correct syntax is a=a.Resize(10) I dont' know that really do Array += [1]... (it outputs '20')... Import mojo Function Main:Int() Local ZArray:Int[] ZArray=ZArray.Resize(10) '<--- Print "Len: "+ZArray.Length ZArray += [1] Print ZArray.Length Return 0 End Function | 
| 
 | ||
|  a=a.Resize(10) Whoops -- shoulda spotted that from the language reference! | 
| 
 | ||
| Yep, what sucks is that it cost me about 4 hours...  :( | 
| 
 | ||
| In HTML the array gets converted to some kind of string array. Every other element is a ',' and the number 123 is converted to ['1']['2']['3'] In FLASH it looks like the program doesn't process anything after line: 15 In GLFW It fails to compile because '+=' is not a valid operator. Strict Import mojo Function Main:Int() Local ZArray:Int[] ZArray=ZArray.Resize(5) '<--- Print "Len: "+ZArray.Length For Local i% = 0 Until ZArray.Length Print ZArray[i] Next ZArray[4] = 123 ZArray += New Int[1] '[1] Print "new Len: "+ZArray.Length For Local i% = 0 Until ZArray.Length Print ZArray[i] Next Print "Done." Return 0 End Function | 
| 
 | ||
| Hi, += shouldn't be valid with arrays - compiler bug! | 
| 
 | ||
| Mark, Is there another handy shortcut to append to an array like in Bmax? Arr += [n] EDIT: I did some google-ing and it seems that every target language has method of appending to an array. .push() or vector for c++. Doing it in java is little wonky though. | 
| 
 | ||
|  I did some google-ing and it seems that every target language has method of appending to an array. .push() or vector for c++. Doing it in java is little wonky though. Java's ArrayList class is a List implementation that is backed by a dynamically-sized array. ArrayList<String> arr = new ArrayList<String>();
arr.add("foo");
arr.add("bar");Internally, ArrayList has an array field called elementData that expands as needed. It's fairly similar to how std::vector works in C++. |