У меня есть строка (аутентифицированная, надежная и т. Д.), Содержащая исходный код, предназначенный для работы в цикле Ruby, быстро. В Python, я бы компилировать строку в абстрактное синтаксическое дерево и eval()
или exec()
его позже:Компилировать строку для байт-кода Ruby для лучшей производительности - например, compile() в Python
# Python 3 example
given_code = 'n % 2 == 1'
pred = compile(given_code, '<given>', 'eval')
print("Passed:", [n for n in range(10) if eval(pred)])
# Outputs: Passing members: [1, 3, 5, 7, 9]
Рубин не имеет функцию компиляции, так что это лучший способ для достижения этой цели?
Это чище, чем я это делал. Благодаря! Я бы добавил, что это выходит за рамки этого вопроса: создатель 'given_code' может захотеть взять на себя ответственность за список формальных параметров. Например, он должен поставить '| n | n% 2 == 1' или даже '{| n | n% 2 == 1} '. – JasonSmith
Ruby терпит неудачу, если количество переданных аргументов не соответствует количеству ожидаемых аргументов. Таким образом, вы можете проверить строку, когда получите, если от создателя. – akuhn
Хорошая точка. В моем конкретном случае администратор (возможно, я в основном) устанавливает предикат для того, интересна ли запись в журнале; поэтому я могу документировать соглашение о параметрах. Главное, чтобы он был достаточно быстрым, поскольку он обрабатывает журналы. Я не готов к отправке на C или что-то еще, кроме любых плохих фруктов, которые я могу получить в Ruby, я возьму. – JasonSmith