Godot: функции setget вызываются для самостоятельного назначения

Созданный на 12 нояб. 2016  ·  3Комментарии  ·  Источник: godotengine/godot

Я не знаю, является ли это предполагаемым поведением или нет (если это так, извините, просто закройте эту проблему), но этого явно нельзя допускать!

Скажем,
1) Я хочу, чтобы переменная foo по умолчанию имела значение 1,
2), и он меняет свое значение, когда пользователь каким-то образом взаимодействует (скажем, ввод).
3) После того, как пользователь закончит, значение foo должно снова иметь значение 1.

Здесь происходит следующее: функции, связанные с setget , вызываются каждый раз, когда значение установлено в 1, когда оно уже равно 1, его следует вызывать один раз (в первый раз), когда исходное значение отличается. Для меня это несколько убивает производительность, я знаю, что могу:

if (new_value == old_value):
   return

Но делать это нужно автоматически.

feature proposal gdscript

Самый полезный комментарий

На мой взгляд, не стоит ломать старый код, когда есть простой обходной путь (у меня есть код, использующий установщик для отображения уведомления пользователю о попытках присвоения одного и того же значения).

Все 3 Комментарий

Не думаю, что делать это автоматически - хорошая идея. Установка переменной с тем же значением, которое она уже имеет, не должна влиять на производительность, это то, что ваша функция setget должна обрабатывать при необходимости. Кроме того, добавление проверки значения _ повлияет_ на производительность, поскольку это одно новое (концептуально ненужное) ветвление.

Я также не думаю, что мы можем просто предположить, что установка одного и того же значения не повлияет на установщик, и, следовательно, его можно обойти.

Похоже, у вас очень сложный сеттер, если установка одного значения каждый раз может сильно снизить производительность.

Что ж, обычно, когда вы выполняете только самостоятельное присвоение, это не проблема, но если вы выполняете больше работы, чем присваиваете новое значение, например, что такое «setget», это ухудшает производительность. Особенно, если значение остается неизменным и присваивается самостоятельно каждый кадр.

Кроме того, все компиляторы C ++ (о которых я знаю) защищают вас от таких злодеяний. (По крайней мере, для базовых типов, при перегрузке оператора присваивания вы отменяете эту защиту) На самом деле, я видел, как некоторые утверждения кода проверяют это, чтобы увидеть, остается ли значение таким же после самостоятельного присвоения чисел с плавающей запятой на процессоре amd. Это было сделано для проверки работоспособности какого-то проекта, я забыл, как он назывался.

На мой взгляд, не стоит ломать старый код, когда есть простой обходной путь (у меня есть код, использующий установщик для отображения уведомления пользователю о попытках присвоения одного и того же значения).

Была ли эта страница полезной?
0 / 5 - 0 рейтинги