2

有没有办法用 Hy 中的索引替换列表或字典元素的值?该nth函数似乎与 Python 的方括号不对应。

我期待像下面的翻译。

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

lst=[1, 2, 3]
lst[1]=20
4

2 回答 2

1

此外assoc,Hy 还可以用setvget特殊的表格上,或者用在具有设置索引或键.的语法的表格上。[]

$ 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__,但有时它在高阶函数中很有用。

于 2018-10-16T02:26:30.827 回答
1

根据文档,您必须使用该assoc函数在列表中的特定索引处设置值。因此,您的代码应该是:

(assoc lst 1 20)

这应该会产生预期的结果。

于 2018-10-15T16:44:33.540 回答