Ruby To Python语法混乱

时间:2010-09-20 18:44:31

标签: python ruby syntax

我正在尝试将某人的Ruby代码转换为我的Python代码。最初的开发人员不再和我们在一起了,我不认识Ruby。他的大多数代码都很容易理解,但是下面的一些语法让我感到很沮丧。

示例:

                myTable = ''
                myTable << [ 0, 1, 0, 0, 0, 300].pack('vvvvvv')
                myTable [40, 4] = [41310005 - 5].pack('V')

1)我是否正确地假设在第二行之后,myTable将保存[]中指定的6个值的数组?是.pack()与Python的struct.pack类似吗?

2)在第三行之后,右边的值是否会存储在数组中的位置40并且是4个字节长? []中的-5只是他有趣还是有特殊意义?

3 个答案:

答案 0 :(得分:3)

你对第二行的看法是错误的,但奇怪的是你说它与struct.pack类似。 myTable是一个字符串。 Array#pack()返回打包数据的字符串(很像struct.pack),String#<<将字符串附加到接收字符串。第三行将索引40处的4个字节设置为[41310000].pack('V')的结果。

答案 1 :(得分:2)

查看Array#pack的文档。它将数组转换为二进制序列的字符串表示形式。 v是“Short,little-endian字节顺序”的指令,V是“Long,little-endian字节顺序”。

<<在发送到String对象时充当连接。但是,由于字符串在该点之前是空的,myTable可能已立即初始化为[0, 1, 0, 0, 0, 300].pack('vvvvvv')

String#[m,n]=将索引m中的子字符串替换为m+n

答案 2 :(得分:1)

不,myTable是一个字符串(它被分配了一个字符串文字)。 &lt;&lt;&lt;字符串(和数组)上的运算符是追加运算符,因此您将字符串附加到字符串。 pack方法返回一个字符串,在本例中是一个字符串“Short,little-endian byte order”。它将是一个由6个短整数组成的字符串,不会以任何方式转换为ASCII,只是转换为字符串。

然后,这个原生格式的整数字符串的一部分被pack中的另一个值替换,这一回合返回一个“Long,little-endian字节顺序”。它被替换为字符串中40个字节的位置,长度为4个字节。

这是一些非常时髦的代码。只要知道myTable是一个字符串,那个包就会以原生格式返回数字。