Замена элемента списка / словаря на индекс в Hy

1

Есть ли способ заменить значение элемента списка или словаря индексом в Hy? Кажется, что nth функция не соответствует квадратной скобке Python.

Я ожидал следующего перевода.

(setv lst [1 2 3])
(setv (nth lst 1) 20)

lst=[1, 2, 3]
lst[1]=20
Теги:
substitution
hy

2 ответа

1
Лучший ответ

Согласно документации, вы должны использовать функцию- assoc функцию для установки значения по определенному индексу в списке. Таким образом, ваш код должен быть:

(assoc lst 1 20)

Это должно дать желаемый результат.

1

Кроме assoc, Hy можно также использовать setv на get специальной формы или на . формы с синтаксисом [] для установки по индексу или ключу.

$ hy --spy  # Shows Python translation.
[...]
=> (setv lst [1 2 3])
lst = [1, 2, 3]
None

=> (setv (. lst[1]) 20)
lst[1] = 20
None

=> lst
lst

[1, 20, 3]
=> (setv (get lst 2) 30)
lst[2] = 30
None

=> lst
lst

[1, 20, 30]

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

=> (.__setitem__ lst 0 10)
lst.__setitem__(0, 10)

=> lst
lst

[10, 20, 30]

Использование __setitem__ напрямую не рекомендуется по сравнению с другими вышеупомянутыми формами, но иногда может быть полезно в функциях более высокого порядка.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню