gpt4 book ai didi

ruby - 通过地址操作数组

转载 作者:太空宇宙 更新时间:2023-11-03 16:08:35 24 4
gpt4 key购买 nike

帮助我处理这部分代码:

class Ooo
attr_accessor :class_array
end

def func(ctx)
local_array = ctx.class_array
local_array = [4,3,5,5,6]
return
end

aaa = Ooo.new
func(aaa)
aaa.class_array => not [4,3,5,5,6] :-(

我认为 ruby​​ 在操作数组时使用地址......为什么这段代码不起作用?我想这样做(在 C 中):

struct ctx
{
uint class_array[10000]
}

void func(struct *ctx)
{
uint* local_array = &ctx->class_array
local_array[0] = 4;
ctx->class_array[0] => 4
}

最佳答案

问题在于这部分代码:

local_array = ctx.class_array
local_array = [4,3,5,5,6]

这并不像您想象的那样。第二行创建一个新列表并将其分配给局部变量,从而替换对 ctx.class_array 的引用。它不会接触ctx.class_array。一段等效的 C 代码将以相同的方式工作,所以我认为您在这里遇到的不仅仅是 Ruby 问题。

在 C 中,您可以使用指针来解决这个问题。在 Ruby 中,您可能想要:

local_array = ctx.class_array
local_array.replace [4,3,5,5,6]

或者干脆(更好!)

ctx.class_array = [4,3,5,5,6]

顺便说一下,直接翻译你的 C 程序也可以:

def func(ctx)
local_array = ctx.class_array
local_array[4] = 4
end

关于ruby - 通过地址操作数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8865489/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com