ruby - 使用 Ruby 验证 Ruby 语法
问题描述
我需要使用 Ruby 以编程方式验证给定字符串是否是有效的 Ruby 语法。我想我可以做到这一点的一种方法是在 EVAL 语句中运行代码,并以这种方式检测语法错误。
有什么更合适、更安全的方法可以做到这一点?
解决方案
让代码字符串为code
. 标准方法是执行以下操作:
begin
RubyVM::InstructionSequence.compile(code)
nil
rescue Exception => e
... # Put code here to return `e` itself, print its message, or whatever you like
end
如果引发错误并被救出,该错误将显示语法错误。如果不是(并且nil
被返回),那么code
是语法上有效的 Ruby 代码(不保证它没有其他类型的错误)。
说这样做很危险等的评论似乎没有意义。
推荐阅读
- c# - 在 C# 中使用 SSH.NET 下载以前缀名称开头的 SFTP 文件
- sql - 我应该使用哪个 SQL 连接?
- python - idxmax() 不适用于 pandas DataFrame
- visual-studio - VS 2019 Mac 的新脚手架没有身份选项
- java - ...OrdonnanceController 中的字段 ordonnanceService 需要找不到类型为“OrdonnanceService”的 bean
- laravel - Vue.js 无法理解这里的问题
- html - Boostrap 4 - Scrollspy 问题
- r - 向量的条件更新
- bash - 意外标记 ';' 附近的语法错误 在 Bash 中运行命令时
- python-3.x - 试图将我的 SQLLITE 逐行插入查询更改为 python 中的批量插入,我如何实现它