как обрабатывать рубиновые символы в сериализации межъязыковых объектов - PullRequest
2 голосов
/ 13 декабря 2010

В настоящее время я работаю над проектом, в котором мне нужно перенести объекты из ruby ​​в python и обратно, очевидно, сериализация - это путь.Я смотрел на такие вещи, как yaml, но решил написать свой, так как не хотел иметь дело с зависимостями библиотек и тому подобным, когда пришло время распространять.Я написал, как работает этот формат сериализации здесь .

. Мой вопрос заключается в том, что, поскольку этот формат предназначен для работы между языками между ruby ​​и python, как мне сериализовать символы ruby?Я не знаю об объекте, который работает так же в Python.сбой дампа, содержащего символ?я должен просто сериализовать это как строку?что будет лучше?

Ответы [ 3 ]

1 голос
/ 13 декабря 2010

Разве это не зависит от того, что нужно вашему проекту?Если символы важны, вам понадобится какой-то способ с ними справиться.

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

РЕДАКТИРОВАТЬ: Если необходимо работать с другими программистами, передавая значения обратнои вперед не должны их менять.Так что вам нужно либо правильно обрабатывать символы, либо сразу же выдавать ошибку.Это должно быть достаточно просто в Python:

class Symbol(str):
    pass

# In serialising code:
if isinstance(x, Symbol):
    serialise_as_symbol(x)
0 голосов
/ 14 декабря 2010

Если символы являются камнем преткновения, тогда у вас есть три варианта: не разрешать их, конвертировать их в строки на лету или придумать способ сделать их универсальными и / или безвредными на других языках.

0 голосов
/ 14 декабря 2010

По какой причине вы не используете стандартный формат обмена данными, такой как JSON или XML? Они кажутся приемлемыми для бесчисленных приложений, сервисов и программистов.

...