I didn't say obscure (obscure would not be clever), and most of the names suggested so far are worse in that they give a false impression of what the library is about (MultiTip/InfiniTip suggests multiple tooltips open at once and not multiple columns, for example).
I know the garbage cycling issue was a definite issue in older WoWs but I'm not so sure about the newer one. In general though passing a table as an argument is discouraged.
People are still seeing the "block too big" crashes in WotLK beta, so I'd assume the issue persists.
And yeah, mixing is ugly and would be best avoided if possible.
Is is possible to create some kind of standardized custom data structure/object that can be populated and passed in? This wouldn't have garbage collection issues because it could exist as a singleton in the addon that is passing it. Yes, it precludes the ability to do simple one-liner calls, but it avoids a lot of potential clunky back-end work.
Edit: It would also allow you to implement additional optional parameters without breaking backwards compatibility with addons that use it.
I like the idea of passing in a table of argument names and values, but I guess that's probably highly inefficient. I don't see it as a bad coding practice in general though for cases like this, given the alternatives.
If efficiency is the issue then you could have a function that takes a table and is just a wrapper for :SetCell(), so that SetCell() could still be used directly when performance is a concern.
I'd prefer other designs like named arguments, method overloads or dictionary arguments, but none are available and cheap in LUA. And having 4 optional positional arguments doesn't help the readability either.
Yeah, sounds like you're caught between a rock and a hard place there.
Indeed,b ut that is why we offer a way for you to use it without ever knowing.
I just mean that from a software engineer/developer perspective, context-sensitive arguments used to that extent makes a big mess in terms of readability. Anyone reading code that uses it will want to kill whoever wrote the code and the library.