В Swift, как я могу объявить словарь, где ключ является функцией? (не соответствует протоколу «Hashable») - PullRequest
0 голосов
/ 08 сентября 2018

Я пытаюсь добиться этого в Swift:

let dict : [ () -> () : String]
//error: type '() -> ()' does not conform to protocol 'Hashable'
//let dict : [ () -> () : String]
//^

Но получение ошибки '() -> ()' не соответствует протоколу 'Hashable'. Как я могу исправить эту ошибку?

Edit: Я портирую конечный автомат из Lua, где ключ оказывается функцией. (Я знаю, что это может быть странно на любом другом языке, но для Луа это нормально). Код Lua:

local machine = {}

machine [Entry] = {loop = Entry, go = Another, gosub = sub } 
machine [Another] = {go = Entry, loop = Another, next = Next } 
machine [Next] = {startAgain = Entry } 
machine [sub] = {out = Entry, next = Next, gosub = indoor, goOutDoor = outdoor } 
machine [indoor] = {out = sub, next = sub } 
machine [outdoor] = {next = sub } 

1 Ответ

0 голосов
/ 08 сентября 2018

Я не думаю, что вы можете это исправить. Ключ для словаря должен соответствовать протоколу Hashable. Это означает, что у него есть свойство Int hashValue и что он реализует оператор ==. (См. Ссылку: https://developer.apple.com/documentation/swift/hashable)

Функции не соответствуют протоколу Hashable, поэтому они не могут быть словарными ключами.

...