Godot: Las funciones setget se llaman para autoasignación.

Creado en 12 nov. 2016  ·  3Comentarios  ·  Fuente: godotengine/godot

No sé si este es el comportamiento previsto o no (si lo es, lo siento, simplemente cierre este problema), ¡pero esto claramente no debería estar permitido!

Déjanos decir,
1) Quiero que una variable foo tenga un valor de 1 por defecto,
2) y cambia su valor cuando el usuario interactúa de alguna manera (digamos entrada).
3) Una vez que el usuario haya terminado, el valor de foo debe tener el valor de 1 nuevamente.

Lo que sucede aquí es que las funciones asociadas con setget se llaman cada vez que el valor se establece en 1 cuando ya es 1, debe llamarse una vez (la primera vez) cuando el valor original es diferente. Esto es algo que mata el rendimiento para mí, sé que puedo hacer esto:

if (new_value == old_value):
   return

Pero esto debería hacerse automáticamente.

feature proposal gdscript

Comentario más útil

En mi opinión, no vale la pena romper el código antiguo cuando hay una solución simple (tengo un código que utiliza el configurador para mostrar una notificación al usuario para los mismos intentos de asignación de valor).

Todos 3 comentarios

No creo que sea una buena idea hacer esto automáticamente. Establecer una variable con el mismo valor que ya tiene no debería afectar el rendimiento, esto es algo que su función setget debería manejar si es necesario. Además, agregar una verificación de valor _ afectará el rendimiento, ya que es una nueva ramificación (conceptualmente innecesaria).

Tampoco creo que podamos suponer que la configuración del mismo valor no tendrá ningún impacto en el colocador y, por lo tanto, se puede omitir.

Parece que tiene un setter muy complicado si el establecimiento de un valor cada vez puede hacer que el rendimiento sea un éxito.

Bueno, normalmente, cuando solo haces la autoasignación no sería un problema, pero si haces más trabajo que asignar un nuevo valor, como de lo que se trata "setget", perjudicará el rendimiento. Especialmente si el valor permanece sin cambios y se asigna automáticamente a cada cuadro.

Además, todos los compiladores de C ++ (que yo conozca) te protegen contra tales atrocidades. (Al menos para los tipos básicos, el operador de asignación de sobrecarga está anulando esta protección) De hecho, he visto algunos códigos que lo comprueban para ver si el valor sigue siendo el mismo después de la autoasignación de números flotantes en amd cpus. Eso se hizo como prueba de cordura para algún proyecto. Olvidé cómo se llamaba.

En mi opinión, no vale la pena romper el código antiguo cuando hay una solución simple (tengo un código que utiliza el configurador para mostrar una notificación al usuario para los mismos intentos de asignación de valor).

¿Fue útil esta página
0 / 5 - 0 calificaciones