从 Ruby 块中提取 AST

2023-12-27

是否有可能从 Ruby 本身获取一个块的 AST?

我已经研究过 ParseTree 和 ruby​​_parser,但它们似乎都对 Ruby 1.9.2 提供了粗略的支持(根据我读到的内容)。我需要一些与 1.9.2 配合良好的东西。


Ripper 开箱即包含在 MRI 1.9 中。

ruby-1.9.2-p180 :004 > require 'ripper'
 => true
ruby-1.9.2-p180 :005 > Ripper.sexp("def a; end")
 => [:program, [[:def, [:@ident, "a", [1, 4]], [:params, nil, nil, nil, nil, nil], [:bodystmt, [[:void_stmt]], nil, nil, nil]]]] 

在 1.8 中,Ruby 通过遍历 AST 来执行代码,因此可以获得给定方法/块的 AST。在 1.9 中情况并非如此;代码首先被解析,然后转换为YARV字节码,然后执行。翻译步骤后不保留源,也不保留 AST,并且后者是不可逆的;因此你无法获得 1.9 中某个区块的 AST。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 Ruby 块中提取 AST 的相关文章

  • C语言中如何通过内存地址映射函数名和行号?

    如何用 GCC 中的内存地址映射回函数名称和行号 即假设一个 C 语言原型 void func Get the address of caller maybe this could be avoided MemoryAddress get
  • '回应?'与“定义?”

    如果我想检查是否定义了给定名称的方法 使用哪个更好 respond to or defined 从效率的角度来看 可以有理由使用defined 因为defined 是一个内置关键字 而respond to 是一种方法 因此前者可能更快 但另
  • 通过 ruby​​ 进程共享变量

    我正在编写一个 gem 其中我必须分叉两个进程来启动两个 webrick 服务器 我想通过基类的类方法启动该服务器 因为应该只运行这两个服务器 而不是多个服务器 在运行时 我想调用这两台服务器上的一些方法来更改变量 我的问题是 我无法通过基
  • 如何在 Ruby 中将 DateTime.now 转换为 UTC?

    如果我有d DateTime now 如何将 d 转换为 UTC 带有适当的日期 DateTime now new offset 0 将在标准 Ruby 中工作 即没有 ActiveSupport
  • Rails 6:每个用户只能创建一个配置文件

    我目前正在开发 Rails 6 应用程序 我有以下关联 用户有一个配置文件 并且配置文件属于用户 当编辑用户的配置文件时 我最终为该用户提供了两个配置文件 我希望每个用户只有一份个人资料 编辑表单 profile edit html erb
  • 在类的所有方法之前运行一个方法

    在 C 3 或 4 中可以做到这一点吗 也许有一些反思 class Magic RunBeforeAll public void BaseMethod runs BaseMethod before being executed public
  • 使用yard创建文档时如何防止[查看源代码]链接?

    我正在使用yard生成项目文档 但我不想在文档中显示 查看源代码 链接 我已深入研究yard官方指南 但仍然没有得到解决方案 有什么想法吗 谢谢 我可能有点晚了 但您可以通过从 method details 部分中删除 源 部分来轻松自定义
  • 如何将枚举作为字符串存储到rails中的数据库中

    如何在 ruby 中创建迁移 其中默认值是字符串而不是整数 我想将枚举存储到数据库中 但我不想将其存储为整数 因为这样对于另一个应用程序来说没有意义想要使用同一张桌子 我该怎么做default female 代替default 0 clas
  • 以 Rails 形式处理 MongoMapper EmbeddedDocument

    首先 我对一般编程和 Rails 都是新手 我选择 Rails 是因为它看起来是一种很容易上手的语言 对于我的项目 我将 MongoMapper 与 Rails 结合使用 我正在尝试以与文档相同的形式处理嵌入文档 我有以下模型 class
  • Ruby:如何编写 gem? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想为 Ruby 编写一个包并将其作为 gem 提供 有哪些工具 步骤和陷阱 有没有好的教程 截屏视频等
  • DWR 如何转换传入数据并避免类型擦除

    我想请求一个集合的项目类 某种特定的反映 但是关于类型擦除似乎是不可能的 而且关于我在堆栈上读到的一些主题也是如此 有一些解决方法 here https stackoverflow com questions 8452893 avoidin
  • Ruby on Rails:有关 validates_presence_of 的问题

    我的基于 ActiveRecord 的模型中有一个关系 如下所示 belongs to foo 我的模型应该始终在其中定义 foo 才能有效 我的问题是 当使用 validates presence 时 使用哪一个是合适的 validate
  • 如何让 DateTime.parse 返回您所在时区的时间?

    我需要这个 require date DateTime parse Mon Dec 27 6 30pm 返回 EDT 时区下午 6 30 的日期时间 但返回 UTC 时间 如何获取 EST 日期时间或将 UTC 日期时间转换为下午 6 30
  • 我可以使用反射更改 C# 中的私有只读字段吗?

    我想知道 由于很多事情都可以使用反射完成 我可以在构造函数完成执行后更改私有只读字段吗 注 只是好奇 public class Foo private readonly int bar public Foo int num bar num
  • 在文档片段中查找注释或文本节点

    我必须清理 Nokogiri HTML DocumentFragment 文档 删除仅包含空格的注释节点和文本节点 这是一个例子 html p paragraph p p paragraph p p paragraph p doc Noko
  • 使 case/switch 返回值的快捷方式

    我很确定我看到有人做了像下面的代码这样的快捷技术 这不起作用 return case guess when guess gt answer then high when guess lt answer then low else corre
  • 为什么反射会减慢Android手机的速度

    我多次读到反射会降低手机性能 这有多真实 例如 在我的例子中 我从 Web 服务获取一些参数 这些参数与我在 Android 应用程序中的类的参数同名 所以我只是使用java字段和反射设置这些参数的值 它似乎并没有降低性能 有人可以向我解释
  • Base36 编码字符串?

    我一直在网上查找 但找不到解决此问题的方法 在 Python Ruby 或 Java 中 如何对以下字符串进行 Base 36 编码 nOrG9Eh0uyeilM8Nnu5pTywj3935kW 5 Ruby 以 36 为基数 s unpa
  • 如何检查用户电子邮件的唯一性并将结果传递给 jQuery?

    我有这个问题 我正在控制器中检查用户电子邮件并发送 json 成功响应 如果已获取 并添加输入的 css 样式 我还需要阻止提交并添加一些消息 这是我的检查电子邮件操作 使用本文 http paydrotalks com posts 45
  • Rails 未定义“2013-03-06”的方法“strftime”:字符串

    我收到错误 2013 03 06 的未定义方法 strftime 字符串 当尝试使用 strftime 从字符串 2013 03 06 正常显示日期 2013 年 6 月星期日 3 日或类似的日期 时 在我的 index html erb

随机推荐

  • URL 重写 GET 参数

    我希望我的网址如下所示 www website com home foo bar hello world 我只想改变第一个获取参数 然而实际的 幕后 网址是这样的 www website com index php page home fo
  • 高度与线高样式

    当处理永远不会超过一行的文本时 使用这两种方法有什么区别 从我所看到的关于元素顶部或底部的元素来看 它们都可以在屏幕上产生类似的结果 如果是的话为什么还要使用行高呢 使用高度会更有意义 编辑 一个示例是从内部带有文本的 div 创建的风格化
  • 如何在 Django 中使用模式?

    我想在 Django 中使用 PostgreSQL 模式 我该怎么做 也许这会有所帮助 DATABASES default ENGINE django db backends postgresql psycopg2 OPTIONS opti
  • 基于ListView创建XML文件

    我想创建一个基于 ListView 的 XML 文件 现在 我正在创建 ListView 的位图 使其成为可绘制对象 然后将其设置为相对布局的背景 像这样 public Bitmap getWholeListViewItemsToBitma
  • java.sql.SQLException:用户“root”@“localhost”的访问被拒绝(使用密码:YES)Spring boot

    我针对这个问题进行了很多搜索 但没有找到适合我的好的解决方案 我的数据库名称 employee management system 我的应用程序属性 spring datasource url jdbc mysql localhost 33
  • 如何在 ruby​​ 中进行命名捕获

    我想命名从扫描中捕获的字符串 怎么做 555 333 7777 scan d 3 d 3 d 4 flatten gt 555 333 7777 可以改成这样吗 area gt 555 city gt 333 local gt 7777 o
  • SSRS 2008 日期格式化和导出到 Excel 混乱

    假设我在 Reporting Services 模板中有一个带有日期值的字段 例如 CDate 2010 12 03 我将 d 格式应用于此单元格 根据描述 该格式 将反映报告的区域设置 我使用英语生成报告 日期显示为12 03 2010
  • Python 计划未按计划运行

    我使用下面的代码每 5 分钟执行一次 python 脚本 但是当它下次执行时 它不会像以前那样在精确的时间执行 例如 如果我在上午 9 00 00 准确执行它 则下次它在上午 9 05 25 执行 下次在上午 9 10 45 执行 由于我每
  • React Router 中的 match.url 到底是什么?

    我在 React Router 文档中看到您传递到组件中match道具 你可以打电话match url 但您似乎从未真正将任何内容传递给组件 那么 match 到底是什么 你从哪里得到它 希望这可以帮助 https reacttrainin
  • 如何在 vaadin 中设置网格单元格样式

    我创建了一个带有一列的简单网格 public MyGrid addComponentColumn this getIcon setClassNameGenerator i gt icon img setItems some items se
  • Python文件IO“w”与“wb”[重复]

    这个问题在这里已经有答案了 想知道从 Python 编写文件时真正的区别是什么 从我可以看到如果我使用w or wb我用文本得到了相同的结果 我认为保存为二进制文件只会在十六进制编辑器中显示二进制值 但它也会显示文本 然后显示该文本的 AS
  • python:为什么替换不起作用?

    我编写了一个快速脚本 从保存在 Excel 列中的网站地址列表中删除 http 子字符串 但替换功能不起作用 我不明白为什么 from openpyxl import load workbook def rem string print s
  • JavaScript EventListener“pointerMove”:每秒点数

    我有一个添加了 pointerMove EventListener 的元素 现在 当移动鼠标时 我可以通过计算自 pointerDown 以来绘制的点总数并将其除以自 pointerDown 以来经过的时间来测量 pointerMove 每
  • 与 Jest 的全局 TypeORM 连接

    我在使用 PostgreSQL 与 TypeORM 和 Jest 时遇到一些问题 基本上 在每个测试文件中 我在测试运行之前打开数据库连接 并在所有测试运行后关闭它 但即使我关闭连接我收到sorry too many clients alr
  • Nginx proxy_pass 所有url参数

    我想代理这样的请求 http myproxy com api folder1 result1 test 1 http myproxy com api folder3447 something var one 前往同等目的地 http des
  • 从扩展获取登录 Visual Studio 用户的身份

    我正在开发一个 Visual Studio 2015 扩展 我希望获取登录 IDE 的用户的身份 与登录 Windows 或运行 devenv 的用户不同 我不知道从哪里 或是否 可以获得该信息 它似乎不在DTE https msdn mi
  • Javascript 数组是原始数组吗?字符串?物体?

    数组只是伪装的对象吗 为什么 为什么不呢 它们以什么方式 这样 不是 我一直认为 JS 中的数组和对象本质上是相同的 主要是因为访问它们是相同的 var obj I me var arr new Array arr you them con
  • 不确定为什么变量未定义。可能的范围问题?

    如果你看一下下面的函数 在第 11 行 它alert template 它打印undefined If I alert template 在ajax成功回调中 它打印没有问题 由于模板是在函数顶部定义的 因此这不应该在整个函数中是全局的吗
  • Windows 应用商店应用程序的日志记录框架

    我正在寻找将日志记录和检测构建到我的 Windows 应用商店应用程序中 对于 Windows 应用商店应用程序的良好日志记录框架有什么建议吗 我知道我可以通过写入文件或 Azure 存储来推出自己的产品 很好奇是否已经有任何东西 Go f
  • 从 Ruby 块中提取 AST

    是否有可能从 Ruby 本身获取一个块的 AST 我已经研究过 ParseTree 和 ruby parser 但它们似乎都对 Ruby 1 9 2 提供了粗略的支持 根据我读到的内容 我需要一些与 1 9 2 配合良好的东西 Ripper