Ferramentas do usuário

Ferramentas do site


geopro:pedro:tmedisc

Observer

observer(cell) que não recebe um atributo, e sim uma função que retorna o valor a ser usado.

Save

  • Ver a questão temporal abaixo.
  • Ao invés de receber um atributo como parâmetro, o save poderia também receber um function(cell) para calcular o valor dinamicamente. Desta forma, um valor que representasse a estratégia do agente dono da célula não precisaria de um forEachCell adicional para atribuir este valor à célula e ainda economizaria memória.

Questões temporais

  • Quando tiver o current simulation time como valor global, verificar os save para que time tenha como valor default o tempo atual.
  • Para leitura de espaços celulares e de vizinhanças, verificar as tabelas temporais e colocar no timer eventos para atualizar os dados com os novos valores temporais. Estas alterações devem ter prioridade sobre todas as outras ações.
  • A função config para um Event que está executando nao afeta o desenvolvimento deste mesmo evento no futuro.

Operador # para CellularSpace, Neighborhood

Fonte: http://www.lua.org/manual/5.1/manual.html#2.8

toda metatable pode ter um operador “len”, que implementaria o operador #. O problema é que, para tabelas, ele não tem como ser chamado:

   function len_event (op)
     if type(op) == "string" then
       return strlen(op)         -- primitive string length
     elseif type(op) == "table" then
       return #op                -- primitive table length
     else
       local h = metatable(op).__len
       if h then
         -- call the handler with the operand
         return (h(op))
       else  -- no handler available: default behavior
         error(···)
       end
     end
   end

De acordo com listas de e-mails, será possível fazer isto com Lua 5.2.

__index and __newindex metamethods to Observing

Fonte: http://julien.danjou.info/blog/index.php/post/2008/12/30/Rants-about-Lua

Lua defines two useful metamethods, which are _index and _newindex. Both can be set on a table or any other object. _index will be called upon each read access to an undefined key on an object, and _newindex upon each write access.

Example

a = {}
setmetatable(a, { __index = myindexfunction, __newindex = mynewindexfunction }) -- function are not defined, this is just an example
a[1] = "hello" -- This will call __newindex metamethod
return a[2] -- This will call __index metamethods
return a[1] -- This will NOT call __index

The last line does not call index meta-method because a[1] does exists. This is a problem when you want to use table as object, because sometimes you want to monitor access to the table elements.

This can be easily worked around using a proxy system: you don't store things in the table you manipulate, but in another table.

a = {}
realtable = {}
setmetatable(a, { __index = myindexfunction, __newindex = mynewindexfunction }) -- function are not defined, this is just an example

Where meta-methods are something like:

function myindexfunction(table, key)
  return realtable[key]
end
function mynewindexfunction(table, key, value)
  realtable[key] = value
end

This way, our a table will always be empty, and realtable will have the data. At every read or write access to a, the meta-methods will be called. This is very convenient and widely used hack.

geopro/pedro/tmedisc.txt · Última modificação: 2010/06/29 21:10 por pedro