我有一个字符串(已验证、受信任等),其中包含旨在在 Ruby 循环中快速运行的源代码。在 Python 中,我会将字符串编译成抽象语法树,然后再将其编译为 eval()
或 exec()
:
# 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]
Ruby 没有编译功能,那么最好的实现方式是什么?
最佳答案
基于jhs的解决方案,但直接使用lambda作为循环体(&
在lambda上调用to_proc
并将其作为 block 传递给select函数).
given_code = 'n % 2 == 1'
pred = eval "lambda { |n| #{given_code} }"
p all = (1..10).select(&pred)
关于python - 将字符串编译为 Ruby 字节码以获得更好的性能——就像 Python 中的 compile(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1900327/