On Fri, 29 Feb 2008, steve donovan wrote:
On Thu, Feb 28, 2008 at 9:16 PM, Asko Kauppi
<askok@dnainternet.net> wrote:
local function mydear( t :string_or_table, i :int, j :
[int], n :
[number] )
: string, table, [int]
...function body with returns...
end
Nice notation! I was thinking about this general problem the other
day: how does one explcitly specify type in a dynamic language? The
idea was that types are objects, and one builds them up with
expressions:
string_or_table = choice(String,Table)
string_or_nil = choice(String,Nil)
Location = choice({X=Double,Y=Double},{Double,Double})
I like that syntax either, but I have some doubts :-)
Could you accept a proxy table instead of the real table?
How would you specify that? How would you specify properties of
objects? An example of what I am looking for is:
function get_status (db, id)
local cond = "id="..id.." AND estado_retorno is not null"
return db:select ("status", "processo", cond)()
end
How would you specify that you can call db's select?
I am not interested in the real type of db: it could be a userdata
or a table, and in this case it could have the field select or it
could have a metatable with a __index metamethod; also, the select
object could be a function or a "callable" object... How would you
manage that?
I am not sure if we should check the _type_ or the operations
we want. In my case, I only care about db.select being a callable
object. One might argue that I would have to check its arguments,
but I would delegate it for the call itself.
Regards,
Tomas