User blog comment:Nanamin/Lua-based Fleet Composition Template/@comment-25683568-20150412051502/@comment-26171095-20150412221954

A-Are you okay? That's some kind of heavy breathing... *Pats on back.*

Jokes aside, it was pretty hard to sub-class BaseTable for this because I had no idea what everything did at first. I've also never written specifically in Lua, though the basics are the same regardless of language (thankfully). Here's an overview of what I went through:
 * 1) At first, I was trying to copy the Infobox modules because I thought I could somehow put it together and stick 6 of them side by side to achieve the above but...bad idea. That's entirely on me.
 * 2) I had no idea how I was supposed to test and what everything was for exactly. I read through Module:ShipInfoKai, Module:EquipmentInfoKai, Module:EliteShipsKai, Module:EquipmentListKai, Template:ShipInfoKai (specifically how the arguments were being passed), Template:EliteShipsKai (arguments) and Sandbox/ShipCardListKai (because it had a visually different table structure but still used BaseTable). Eventually, I ended up just copy-pasting my entire code into the debug console at the bottom and using a print(NanaminFleet:Table) to test.
 * 3) My greatest issue was one I left in after I first released this the first time. I could not figure out why !hq and !route were not being processed. So I started raising errors in the code and piling up the self._args to find out that BaseTable somehow auto-magically figured out they were variables and pulled them out. It took a good few hours to finally figure out that it wasn't that my code sucked, it was because what I expected wasn't coming in (and there was no indication that this would happen). I guess it's because there's an "=" sign in their declarations?

For issues, I noticed that I needed to delegate "- Unequipped -" and "- Locked -" to the declarations. As the logic is completely separate from building the actual rows, I couldn't check if the slot is locked or not without trying to pass in a table for every self[column] call, which is apparently bad practice. As it is, I doubt that's a real issue to be addressed.