Godot: funções setget são chamadas para auto-atribuição

Criado em 12 nov. 2016  ·  3Comentários  ·  Fonte: godotengine/godot

Não sei se esse é o comportamento pretendido ou não (se for, desculpe, apenas feche este problema), mas isso claramente não deveria ser permitido!

Deixe-nos dizer,
1) Quero que a variável foo tenha o valor 1 por padrão,
2) e muda seu valor quando o usuário interage de alguma forma (digamos, entrada).
3) Depois que o usuário terminar, o valor de foo deve ter o valor 1 novamente.

O que acontece aqui é que as funções associadas a setget são chamadas sempre que o valor é definido como 1 quando já é 1, deve ser chamada uma vez (a primeira vez) quando o valor original for diferente. Isso está matando um pouco o desempenho para mim, eu sei que posso fazer isso:

if (new_value == old_value):
   return

Mas isso deve ser feito automaticamente.

feature proposal gdscript

Comentários muito úteis

não vale a pena quebrar o código antigo, na minha opinião, quando há uma solução simples (tenho um código que utiliza o setter para exibir uma notificação ao usuário para as mesmas tentativas de atribuição de valor).

Todos 3 comentários

Não acho uma boa ideia fazer isso automaticamente. Definir uma variável com o mesmo valor que já possui não deve afetar o desempenho, isso é algo que sua função setget deve tratar, se necessário. Além disso, adicionar uma verificação de valor _will_ afeta o desempenho, uma vez que é uma ramificação nova (conceitualmente desnecessária).

Eu também não acho que podemos simplesmente supor que a configuração do mesmo valor não terá impacto no configurador e, portanto, pode ser ignorado.

Isso parece que você tem um configurador muito complicado, se a configuração de um valor a cada vez pode afetar o desempenho.

Bem, normalmente, quando você apenas faz a auto-atribuição, não seria um problema, mas se você fizer mais trabalho do que atribuir um novo valor, como o que é "setget", isso prejudicará o desempenho. Especialmente se o valor permanecer inalterado e autoatribuído a cada quadro.

Além disso, todos os compiladores C ++ (que eu conheço) protegem você contra tais atrocidades. (Pelo menos para tipos básicos, sobrecarregando o operador de atribuição, você está anulando essa proteção) Na verdade, eu vi alguns códigos de verificação verificando se o valor permanece o mesmo após a auto-atribuição para números flutuantes no amd cpus. Isso foi feito como verificação de integridade para algum projeto. Esqueci como era chamado.

não vale a pena quebrar o código antigo, na minha opinião, quando há uma solução simples (tenho um código que utiliza o setter para exibir uma notificação ao usuário para as mesmas tentativas de atribuição de valor).

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