Re[4]: Nemerle.Extensions1
От: VladD2 Российская Империя www.nemerle.org
Дата: 09.08.13 19:36
Оценка: +1
Здравствуйте, _NN_, Вы писали:

_NN>А есть также поддержка Include, Exclude как в оригинальном макросе ?


Откровенно говоря — хреновая концепция от которой можно отказаться.

Вот что реальено нужно — это режим работы не с исключениями, а задающий поля для сравнения (ключевые поля). А то бывает что в ключ попадает только 1-3 поля и приходится на все остальные навешивать Ignor-ы.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Nemerle.Extensions1
От: VladD2 Российская Империя www.nemerle.org
Дата: 09.08.13 19:44
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Это и есть оригинальный, только изменил генерацию хешкода на существенно более лучшую (использовал умножение)


Интересно было бы сравнить количество возникающих колизий в реальном Dictionary/HeshSet. А то я сколько не смотрел все эти алгоритмы давали неплохую уникальность хэша, но на практике, при делении его на число элементов все равно появлялись коллизии.

А>и немного оптимизировал генерируемый код. Кроме того добавил приват поле хешкода генерируемое если неизменяемых значений 7 и более.


Хм. А если объект изменяемый? Ну, скажем у нас неизменяемое поле ссылающееся на List<T>?

Кроме того это поведение должно быть отключаемым. И на это поле нужно навешивать разные маро-атрибуты чтобы его Record и прочие макросы не хватали.

А>Так я не понял. Размещение процедурн в другом неймспейсе? какой профит. Мне что бы понять не хватает знаний.


Лично я тоже не понял. Странное предложение.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Nemerle.Extensions1
От: VladD2 Российская Империя www.nemerle.org
Дата: 09.08.13 19:48
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>
_NN>WithoutName.AEqualityComparer().Equals(a, b) == true
_NN>WithoutField.AEqualityComparer().Equals(a, b) == false
_NN>Default.AEqualityComparer().Equals(a, b) == false
_NN>


На мой взгляд — какой-то овердизайн.

Тогда уж нужно создать отдельный макрос генерирющий компораторы, а не этот во всемогутер превращать. Общие части, конечно, в библиотеку нужно вынести будет.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Nemerle.Extensions1
От: Аноним  
Дата: 12.08.13 17:50
Оценка: 58 (2)
Здравствуйте, VladD2, Вы писали:

1. Добавлены свойства атрибутов AllIgnore = true — игнорировать все поля. Поля для использования должны быть помечены как [EqualsNotIgnore] или указаны в атрибуте класса как NotIgnore
2. Добавлена возможность указать поля вариантов NotIgnore = A.name
3. добавлена возможность отключить создание неизменяемых кусков с помощью указания WhenGenerateCashField необходимого минимального числа числа константных полей. К константным полям относятся неизменяемые примитивные типы и строки. по умолчанию значение 7.
4. Произведен отказ от использования лямбд.
5. Немного сокращен генерируемый код

Сделал пулреквест
Re[7]: Nemerle.Extensions1
От: Аноним  
Дата: 12.08.13 17:56
Оценка:
Здравствуйте, VladD2, Вы писали:

[StructuralEquality(Ignore = name, NotIgnore = A.name, AllIgnore = true)]
variant X
{
 | A { name : string; name2 : string; other : int; }
 | B { name : string }
 | C {
     [EqualsNotIgnore] a1:int; 
     [EqualsNotIgnore] a2:int; 
     [EqualsNotIgnore] a3:int }
}
Re[8]: Nemerle.Extensions1
От: VladD2 Российская Империя www.nemerle.org
Дата: 12.08.13 18:06
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, VladD2, Вы писали:


А>1. Добавлены свойства атрибутов AllIgnore = true — игнорировать все поля. Поля для использования должны быть помечены как [EqualsNotIgnore] или указаны в атрибуте класса как NotIgnore


Лучше переименовать EqualsNotIgnore в Key, режим в режим Explicit (и без " = true").

А>2. Добавлена возможность указать поля вариантов NotIgnore = A.name


NotIgnore тоже не очень очевидно. Лучше опять же Key=A.name или keys=A.name.

А>3. добавлена возможность отключить создание неизменяемых кусков с помощью указания WhenGenerateCashField необходимого минимального числа числа константных полей. К константным полям относятся неизменяемые примитивные типы и строки. по умолчанию значение 7.


Не смог распарсить.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.