как ниже писали. для UnityEngine.Object переопределен операторы ==/!=
var go = new GameObject();
// уничтожаем объект, но ссылка не меняется на null
GameObject.Destroy(go);
// тут переопределеннй оператор вернет false и SendMessage не вызовется
if (go != null) go.SendMessage(...);
// А будет честная проверка ReferenceEquals и программа упадет, вызвав SendMessage
go?.SendMessage("");
Я давно видел эту штуку. Но никогда не проверял, что буде если:
ref var myRef = ref CollectionsMarshal.GetValueRefOrNullRef(dict, ket);
dict.Add(...); // тут происходит рост коллекции
myRef = value; // куда сейчас указывает myRef?
Вообще когда я только начал изучать TS я ожидал что type guards позволяют вот так делать. Все еще мечтаю что добавят. С другой стороны typeof так умеет
function getType(x: unknown):
x is { name: string } ? 'user' :
x is { size: number } ? 'box' :
x is number ? 'number' :
x is string ? 'string' :
never {
???
}
switch(getTupe(x)) {
case 'user': log(x.name);
case 'box': log(x.size);
case 'number': log(x * x);
case 'string': log(x);
}
Это конечно все вкусовщина. Для себя определил правило что цвет меняется в тех областях где одно и то же слово имеет разный семантический смысл.
Forимеет разный смысл как часть кода строки или комментария. Значит один цвет для всего кода. Второй цвет для строк. Третий для комментариев.Плюс использую выделение жирным или курсивом в некоторых местах вместо цвета.
Скрытый текст
Пришел к точно такому же подходу. Но не из страха аллокаторов, тут много плюсов:
Понимание ограничений игры. Сколько максимум будет объектов\событий в кадре.
Если все игровое состояние лежит в одной большой структуре, то его легко сохранить/восстановит просто скопировав память.
Подход с CRTP (не знал что так называется) или через tagged union просто на практике показался более удобным чем огромные списки наследования.
Енамы рекомендую аннотировать StringEnumConverter. Иначе индексы могут поехать, если хранить так данные игрока.
как ниже писали. для
UnityEngine.Objectпереопределен операторы==/!=В юнити ещё это выстреливает при
myComponent?.DoIt()или для оператора??Идейно похоже на HTMX, но со своим видением. Здорово
Проглядел что вы об написали об этом. С одной стороны ожидаемо, но я в тайне надеялся что есть какая-то магия.
Я давно видел эту штуку. Но никогда не проверял, что буде если:
Вообще когда я только начал изучать TS я ожидал что type guards позволяют вот так делать. Все еще мечтаю что добавят. С другой стороны typeof так умеет
Можно как-то так сделать
Начало задачи синхронизиповано с концом предыдущей задачи.
Интересно. Спасибо, возьму на заметку.
Утиная типизация чаще всего не вызывает проблем, но иногда хочется ее запрещать для каки-то типов.
Я использовал enum в CocosCreator так:
Вместо того что бы использовать простой number. Так компилятор не давал перепутать id-ки и и выполнить: `const unit = units[itemId]`
Правда не нашел какими флагами это включается на TSPlayground
Я наоборот устал от того что во View нужно создавать очереди и мучаться с тем что модель уже обновилась, а view еще доигрывает анимацию.
Я сейчас остановился на варианте когда есть контроллер, который знает и про модель и про вью и обновляет их параллельно:
Контроллер устроен так что может работать если view не присвоить.