lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


I hate to stray more toward the Python crowd, but
I couldn't help noticing that upvalues seem like
a way to introduce object-oriented like programming
capability into lua.  So the question is, why not
then make it so one is able to define functions that
are called differently depending on the tag of the
first parameter.  

For example, I could define 

myclass = newclass()   -- really would be a "newtag"
myclass = newclass(oldclass) -- same as newtag() except all
          -- methods would be copied from the old class.
e = myclass(5,4,6)  -- would call constructor method for myclass 
            -- with parameters 5,4,6

then I could define a function like

function myclass:mymethod(a,b,c)
local x,y,z
 ...
end

To be invoked as e.mymethod(5,6,7)

You could even have constructors/destructors like

function myclass
local x,y,z

end

or function ~myclass
  (called during garbage collection)

Perhaps I am missing the point on how upvalues should
be used, but it seems to me that invoking methods by
data type is a very common occurrence in most languages,
and lua is an excellent candidate to have good polymorphism.
Tags and classes are already almost analogous, and maybe
there is a simple way to make this work.  I guess
"automatic upvalues" would be like inheritance, and would
facilitate calling subclassed methods, etc.

I don't want to turn lua in to a scripted C++ but lua
would be a very powerful and compact object-oriented 
language.  I think lua's strength is its simplicity so
if these types of features could be added without language
bloat that would be a great thing.

Dan

Daniel Marks
dmarks@uiuc.edu