Я программист Python, новичок в Racket...
Я видел такой код, как:
(define table/c (and/c hash? (not/c immutable?)))
Я понимаю, что это использование контрактов, то есть https://docs.racket-lang.org/reference/data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._and%2Fc%29%29
Таким образом, это означает, что любое место в этой библиотеке, принимающее table/c
arg, должно быть объектом, представляющим собой изменяемую хеш-таблицу.
Мой вопрос: есть ли у Racket какая-либо поддержка утиного ввода здесь (в частности, для выполнения контракта hash?
)?
Скажем, я хотел заменить базовую хэш-таблицу чем-то, поддерживаемым хранилищем k/v... Могу ли я реализовать интерфейс «хэш-таблицы», который позволил бы моему пользовательскому объекту, поддерживаемому хранилищем, пройти проверку контракта hash?
?
Документы по контрактам и это для hash?
проверки мне мало помогло.
gen:dict
. Однакоhash?
не будет верным, аdict?
пройдет. - person Alex Knauth   schedule 19.07.2020hash?
для библиотеки, с которой я работаю. В Python я мог бы проделать какой-нибудь трюк с абстрактными базовыми классами, чтобы почти любой тип мог пройти проверкуisinstance
, как и любой другой тип. В противном случае можно ли отказаться от проверки контрактов, когда я использую библиотеку? - person Anentropic   schedule 19.07.2020.ss
в папкеcs/
, что звучит как что-то специфичное для Racket CS с бэкендом Chez. - person Anentropic   schedule 19.07.2020dict
?hash
не предназначен для расширения, ноdict
является. - person Sorawee Porncharoenwase   schedule 19.07.2020hash?
, поэтому, как я объяснил в вопросе, я пытаюсь найти способ пройти проверкуhash?
- person Anentropic   schedule 19.07.2020impersonate-hash
метод docs.racket-lang.org/reference/ - person Anentropic   schedule 19.07.2020