Mudlet: Complemente funções indexadas 0 com indexadas 1

Criado em 16 abr. 2020  ·  8Comentários  ·  Fonte: Mudlet/Mudlet

Breve resumo do problema / Descrição do recurso solicitado:

Temos algumas funções em TLuaInterpreter.cpp de um design inicial cujo índice começa em 0 - o que não é Lua idiomática e não intuitivo . É necessário adicionar complementos indexados 1 a eles, como https://wiki.mudlet.org/w/Manual : Mapper_Functions # getExitStubs1.

Etapas para reproduzir o problema / Razões para adicionar o recurso:

API mais intuitiva.

Saída de erro / resultado esperado do recurso

Qualquer função que retorna uma tabela indexada começando em 0 também deve ter uma função complementar que começa a indexar em 1.

Informações extras, como versão do Mudlet, sistema operacional e ideias para resolver / implementar:

4.6.2

enhancement help wanted

Comentários muito úteis

Bem, que tal anunciarmos que eventualmente teremos um getLuaApiVersion() número que retornará uma string de número de versão na forma 1.xy , e prometemos que quando formos para a versão 2 todas as funções quebradas / extintas serão corrigido / removido e todo o restante terá manipulação de argumento completamente uniforme e valores de retorno (incluindo nil + mensagens de erro para cada problema de tempo de execução).

É claro que isso fornecerá uma oportunidade de destruir a compatibilidade com versões anteriores, portanto, precisamos colocá-la na API Lua o mais rápido possível para que os pacotes e scripts possam começar a se defender contra uma mudança tão repentina.

Podemos até considerar fazer isso simultaneamente com uma mudança para (float) mudlet::mMudletXmlDefaultFormat para um valor> = 2,0 - o que seria apropriado, pois qualquer arquivo ou pacote XML salvo com tal número será rejeitado completamente (por design) por qualquer Mudlet versão desde 3.0.1 e solicitará o seguinte:

[ ALERT ] - Sorry, the file being read:
            XXXXX.xml
            reports it has a version (2.0.0) it must have come from a later Mudlet version,
            and this one cannot read it, you need a newer Mudlet!

Escusado será dizer que tal mudança será enorme e precisaria ser também concurant com uma versão de lançamento major Mudlet mas eu não esperaria que ser antes Mudlet 6.0, no mínimo. OTOH Seria então possível mudar para uma versão Lua posterior.

Todos 8 comentários

Que tal adicionar getExitStubs1 e getExitStubs0 para que possamos dar um aviso justo e fazer getExitStubs funcionar conforme o esperado em algum ponto? Dessa forma, Mudlet pode se tornar mais idiomático e intuitivo no final.

Eu entendo o que você está dizendo, mas isso quebraria os scripts existentes para o que é, relativamente falando, um problema trivial, não uma boa troca. É bom que alguém possa pegar um código de um fórum de alguns anos atrás, colocá-lo e fazer com que funcione.

Se pudéssemos influenciar magicamente todo o código que foi colocado lá ... :)

Lembro-me de algo como o comando de correção de Rust-lang ... (ou era uma correção de Golang), onde ele consertava as coisas magicamente.

--the following possible functions have 0-indexed
function getRoomsByPosition()
function getExitStubs() --Obviously..
function getAreaRooms()

editar:
Parece que seriam apenas aquelas funções que precisavam ser alteradas para retornar uma resposta indexada 1 adequada.

Bem, que tal anunciarmos que eventualmente teremos um getLuaApiVersion() número que retornará uma string de número de versão na forma 1.xy , e prometemos que quando formos para a versão 2 todas as funções quebradas / extintas serão corrigido / removido e todo o restante terá manipulação de argumento completamente uniforme e valores de retorno (incluindo nil + mensagens de erro para cada problema de tempo de execução).

É claro que isso fornecerá uma oportunidade de destruir a compatibilidade com versões anteriores, portanto, precisamos colocá-la na API Lua o mais rápido possível para que os pacotes e scripts possam começar a se defender contra uma mudança tão repentina.

Podemos até considerar fazer isso simultaneamente com uma mudança para (float) mudlet::mMudletXmlDefaultFormat para um valor> = 2,0 - o que seria apropriado, pois qualquer arquivo ou pacote XML salvo com tal número será rejeitado completamente (por design) por qualquer Mudlet versão desde 3.0.1 e solicitará o seguinte:

[ ALERT ] - Sorry, the file being read:
            XXXXX.xml
            reports it has a version (2.0.0) it must have come from a later Mudlet version,
            and this one cannot read it, you need a newer Mudlet!

Escusado será dizer que tal mudança será enorme e precisaria ser também concurant com uma versão de lançamento major Mudlet mas eu não esperaria que ser antes Mudlet 6.0, no mínimo. OTOH Seria então possível mudar para uma versão Lua posterior.

É possível resolver ao longo das linhas de fazer tabela [0] e tabela [#tabela] a mesma referência? Então, o código que usou a tabela [0] e ipairs funciona sem problemas?
Não acho que seja a solução, pois causa um evento duplicado para o código que usa for i=0, #table do
Parece um problema que tem uma solução alternativa inteligente.

Poderia haver um método usando _index metatabela? Não compreendo totalmente meta-tabelas.

Esta página foi útil?
0 / 5 - 0 avaliações