gpt4 book ai didi

c# - 难以理解按引用传递

转载 作者:太空狗 更新时间:2023-10-30 01:37:50 24 4
gpt4 key购买 nike

我发现在 C# 中理解按引用传递真的很困惑。在我的代码中,我有一个带有两个参数的函数

private bool SerialUnEscape(byte serialData, ref byte serialResult)
{
if (((SerialProcessValue)serialData == SerialProcessValue.SERIAL_PACKET_START) ||
((SerialProcessValue)serialData == SerialProcessValue.SERIAL_PACKET_END)) {
serialEscaped = false;
serialResult = 0;
return (true);
}

} else if (serialEscaped) {

if ((SerialProcessValue)serialData == SerialProcessValue.SERIAL_PACKET_ESCAPE_START) {
serialResult = (int)SerialProcessValue.SERIAL_PACKET_START;
serialEscaped = false;
return (true);
}
} else {
serialResult = serialData;
return (true);
}

}

我调用函数时引用了 serialDataLsb & serialDataMsb

现在我的困惑是,serialDataLsbserialDataMsb 的值是多少,它是否获得了 serialResult 的值??

  for (i = 0; i < serialElements; i++) {
serialDataLsb = 0;
serialDataMsb = 0;
while (serialBufferWalk < serialIndex) {
if (SerialUnEscape(serialBuffer[serialBufferWalk++], ref serialDataLsb)) {
break;
}
}
while (serialBufferWalk < serialIndex) {
if (SerialUnEscape(serialBuffer[serialBufferWalk++], ref serialDataMsb)) {
break;
}
}
serialElementData[i] = (UInt16)(serialDataLsb + (serialDataMsb << 8));
}

我需要将这段代码移植到 python 中,1) 我如何在 python 中实现引用传递

我试过用这个

while serialBufferWalk < serialIndex:
if self.SerialUnEscape(serialBuffer[serialBufferWalk += 1],serialDataLsb):
break
while serialBufferWalk < serialIndex:
if self.SerialUnEscape(serialBuffer[serialBufferWalk += 1],serialDataLsb):
break

最佳答案

如果您真的想模仿按引用传递而不是更改代码以返回值,您可以将要更改的原语包装在一个对象中。为简单起见,我使用了一个列表:

def change_reference(byteContainer):
byteContainer[0] = 42

b = 123
print(b) # Prints 123

# Copy the data into the container list.
container = [b]
# Pass a pointer to that list into the function.
change_reference(container)
# Take the value out of the container.
b = container[0]

print(b) # Prints 42

但这会使您的函数变得非常困惑。你真正应该做的是在返回值中包含修改后的字节:

def test_and_subtract(v):
if v == 1:
return (v - 1, True)
return (v - 2, False)

v = 1
v, b = test_and_subtract(v)
print(v) # 0
print(b) # True

v = 5
v, b = test_and_subtract(v)
print(v) # 3
print(b) # False

此处 return (v - 1, True) 将两个结果放入一个元组中,而 b, v 将它们从该元组中移除。

关于c# - 难以理解按引用传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31728934/

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