我发现在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
。你知道吗
我的困惑是,serialDataLsb
或serialDataMsb
的值是多少,
它得到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
如果您真的希望模拟按引用传递而不是更改代码以返回值,可以将要更改的原语包装到对象中。为了简单起见,我使用了一个列表:
这使得你的函数非常混乱。您真正应该做的是在返回值中包含修改后的字节:
这里
return (v - 1, True)
将两个结果放入一个元组中,b, v
将它们从元组中删除。你知道吗相关问题 更多 >
编程相关推荐