Синтаксис Ruby To Python - PullRequest
       6

Синтаксис Ruby To Python

3 голосов
/ 20 сентября 2010

Я пытаюсь преобразовать чей-то код Ruby в мой код Python.Изначально разработчика больше нет с нами, и я не знаю Ruby.Большую часть его кода достаточно легко выполнить, но некоторые из следующего синтаксиса приводят меня в замешательство.

Пример:

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

1) Правильно ли я считать, что после 2-й строки, myTable будет содержать массив из 6 значений, указанных в []?И это .pack() похоже на struct.pack?

2 в Python 2) После третьей строки будет ли значение справа сохраняться в позиции 40 в массиве и иметь длину 4 байта?-5 в [] он просто веселый или это имеет какое-то особое значение?

Ответы [ 3 ]

3 голосов
/ 20 сентября 2010

Вы ошибаетесь во второй строке, хотя странно, что вы правы, что она похожа на struct.pack.myTable это строка.Array#pack() возвращает строку упакованных данных (очень похоже на struct.pack), а String#<< добавляет строку к получающей строке.Третья строка устанавливает 4 байта с индексом 40 как результат [41310000].pack('V').

2 голосов
/ 20 сентября 2010

Ознакомьтесь с документацией для Array#pack.Он преобразует массив в строковое представление двоичной последовательности.v - это директива для «Короткого порядка байтов с прямым порядком байтов», а V - «Длинный порядок байтов с младшим порядком байтов».

<< действует какконкатенация при отправке объекту String.Поскольку строка до этого момента пуста, myTable можно было бы немедленно инициализировать вместо [0, 1, 0, 0, 0, 300].pack('vvvvvv').

String#[m,n]= заменяет подстроку из индекса m в m+n.

1 голос
/ 20 сентября 2010

Нет, myTable - это строка (ей был присвоен строковый литерал). Оператор << в строках (и массивах) является оператором добавления, поэтому вы добавляете строку в строку. Метод pack возвращает строку, в данном случае строку «Короткий байтовый порядок с прямым порядком байтов». Это будет строка из 6 коротких целых чисел, никоим образом не преобразованная в ASCII, просто выведенная в строку. </p>

Затем часть этой строки целых чисел в их собственном формате заменяется другим значением из пакета, в этом ходу возвращается «длинный байтовый порядок с прямым порядком байтов» Он заменяется на место в строке длиной 40 байтов и длиной 4 байта.

Это довольно прикольный код. Просто знайте, что myTable - это строка, и этот пакет возвращает числа в собственном формате.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...