如何通过存储的表达式修改Julia向量的索引元素值?
解决Julia中通过存储表达式修改向量元素的问题
直接解决方案:构造赋值表达式并求值
你需要将原索引表达式与赋值操作组合成完整的赋值表达式,再通过eval执行:
a = [1, 2, 3] exp = :(a[2]) # 构造包含赋值逻辑的表达式 assign_exp = :($exp = 4) # 执行表达式完成赋值 eval(assign_exp) println(a) # 输出结果:[1, 4, 3]
为什么之前的尝试失败?
$exp = 4报错:Julia的插值语法$仅能在表达式内部使用,直接在代码顶层写该语句不符合语法规则。eval(exp) = 4无效:eval(exp)返回的是a[2]的当前值(即2),给一个函数调用的返回值赋值等同于2 = 4,属于无效操作。
替代方案:解析表达式结构调用setindex!
如果不想构造新表达式,可以拆解原表达式的结构,提取目标数组和索引,直接调用底层的setindex!函数(a[i] = val本质是该函数的语法糖):
a = [1, 2, 3] exp = :(a[2]) # 从表达式中提取目标数组和索引 target_array = eval(exp.args[1]) index = eval(exp.args[2]) # 直接调用setindex!完成修改 setindex!(target_array, 4, index) println(a) # 输出结果:[1, 4, 3]
内容的提问来源于stack exchange,提问作者Akhil Akkapelli
相关产品推荐
相关产品推荐

