Замена элемента списка / словаря на индекс в Hy - PullRequest
0 голосов
/ 15 октября 2018

Есть ли способ заменить значение элемента списка или словаря индексом в Hy?* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *} * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 1004

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

Помимо 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__ напрямую не рекомендуется для других вышеупомянутых форм, ноиногда это может быть полезно в функциях высшего порядка.

0 голосов
/ 15 октября 2018

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

(assoc lst 1 20)

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

...