Что эквивалентно `если 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))
Другие вопросы по тегам