185 похожих чатов

Hello guys! Does someone know how to make this work?

(error in the pic)
Also, is it possible to replace any Hashable to something like type param pack in Swift 5.9?

9 ответов

13 просмотров

afaik KeyPath must always be concrete

Куся 🌿⃤ __UKS
Exact?

say you have property myArray: Int[] (which conforms to Collection), that doesn't mean you can safely assign a dictionary [String: Float] to it just because the dictionary is also a Collection (yet key path is still KeyPath<MyClass, any Collection>. get the idea?

I guess you can experiment with parameter packs, for example this works import Foundation func hash<T, each P: Hashable>( _ item: T, props: repeat KeyPath<T, each P> ) -> Int { var hasher = Hasher() repeat (hasher.combine(item[keyPath: each props])) return hasher.finalize() } struct Example { var p1 = 0 var p2 = true var p3 = "string" } print( hash(Example(), props: \.p1, \.p2, \.p3), hash(Example(), props: \.p1, \.p2, \.p3), hash(Example(), props: \.p1, \.p2), separator: "\n" ) Output: -4549848955267135610 -4549848955267135610 3558766014151656816

Kirill Titov
try writing to WritableKeyPath with protocol

Well I guess it might not work, but this will (at least you can declare another overload in isolation from the logic) public struct HashingPath<Root> { @usableFromInline internal let _extract: (Root) -> AnyHashable @inlinable public init<Value: Hashable>(_ path: @escaping (Root) -> Value) { self._extract = { path($0) } } // You can declare more overloads here @inlinable public func extract(from root: Root) -> AnyHashable { return _extract(root) } } public func hash<T>(_ item: T, props: [HashingPath<T>]) -> Int { return props.reduce(into: Hasher()) { hasher, prop in hasher.combine(prop.extract(from: item)) }.finalize() }

Kirill Titov
try writing to WritableKeyPath with protocol

Btw this works with the first implementation struct Example { var string: String = "" var protocolValue: any Hashable = 0 } hash(Example(), props: \.string, { AnyHashable($0.protocolValue) })

Maxim Krouk
Btw this works with the first implementation stru...

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

Kirill Titov
так, стой, у тебя тип свойства структуры — протоко...

Так изначально проблема не подразумевала запись, но вообще по идее решение со структурой будет нормально работать

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта