Что эквивалентно `если x в y` в hy?
Я не могу найти встроенный (или эквивалентный) в Hy, который позволяет мне проверять что-то без обработки исключения
Я хотел бы написать что-то вроде:
(setv foo {:a 1 :b 2})
(if (in foo :c)
(foo)
(boo))
(:c foo)
а также (get foo :c)
оба приводят к исключению
2 ответа
Hy имеет эквивалент для всех операторов Python. Hy использует префиксную нотацию для всех операторов, но не меняет порядок операндов по сравнению с тем, каким они были бы в инфиксной нотации. Так (- 10 8)
в Hy есть 2
, такой же как 10 - 8
в Python.
Это касается in
оператор тоже. (in :c foo)
как HyKeyword('c') in foo
, Думайте об этом как in(:c, foo)
, а не "В фу,: с?".
вместо (get foo :c) используйте (.get foo :c) и сравните None, если ключевое слово c не существует.
(setv foo {:a 1 :b 2})
(if (!= (.get foo :c) None)
(foo)
(boo))