只加载 Ruby 中正在使用的类?

2023-12-24

如果我加载x.rb, 然后加载该文件中的所有类 https://stackoverflow.com/questions/10001106/does-requiring-a-gem-load-everything-including-things-i-dont-use/10001223#10001223。是否可以检查并查看正在使用哪些类并仅加载这些类?

假设x.rb同时包含Hello和Goodbye类,而我的程序只使用Hello类,是否可以只加载Hello类?

对检查文档的脚本感到满意,并输出一个仅包含 Hello 类和使用它的代码的 .rb...如果不存在的话,这将是一个有趣的 github 项目,但我认为它超出了我的技能范围。


当类在它们自己的单独文件中定义时,您could使用autoload http://www.ruby-doc.org/core-1.9.2/Kernel.html#method-i-autoload12 方法:

autoload :Hello,   'x/hello'
autoload :Goodbye, 'x/goodbye'

当你写的时候Hello,您实际上正在访问Hello持续的。autoload uses const_missing如果未定义常量,则自动需要文件。

请注意,我们在这里仍在处理文件。的内容x/hello.rb将被简单地阅读和评估。该代码可以运行任何操作。它可以require其他文件。它可以定义一百万个其他类。

那是因为源代码实际上只是文本。对于解释语言尤其如此。例如,在Java中,每个“编译单元”通常只能声明一个公共类型 http://docs.oracle.com/javase/specs/jls/se7/html/jls-7.html#jls-7.6。在 Ruby 中,没有这样的东西。


¹ 马茨强烈反对这种做法 http://bugs.ruby-lang.org/issues/5653

² Ruby Insider 文章autoload http://www.rubyinside.com/ruby-techniques-revealed-autoload-1652.html

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

只加载 Ruby 中正在使用的类? 的相关文章

随机推荐

  • Spring Boot 和多模块 Maven 项目

    我正在努力正确设置多模块 Spring Boot Maven 项目 有没有我可以参考的示例项目 目前我的项目结构如下 数据模块 基本上是我的数据层 包含我的 POJO 和数据库存储库接口 PagingAndSortingRepository
  • 如何解决此异常“无法在类中找到属性‘ProductCode’的设置器...”

    我收到以下异常 Could not find a setter for property ProductCode in class OrderItem class 属性 ProductCode 是我的表键之一 看看类中的属性声明如何 pub
  • mySQL 传递闭包表

    我在 SQL Server 中使用了一些代码 从另一个仅具有直接父 子关系的表生成闭包表 我可以对此运行非常简单的查询来确定沿袭 现在我需要在 mySQL 中完成所有这些操作 但是我在递归查询生成闭包表时遇到了问题 我原来的 SQL Ser
  • 如何获取主键来执行更新语句[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在尝试使用 Java JDBC 更新我的表 但我不知道如何使用准备好的语句调用我的主键 我尝试做一个USER ID我的数据库列的对象 但
  • Wix 在重大升级期间不会删除以前版本的burn exe

    我使用burn bootstrapper 创建了一个wix exe 当我尝试对其进行重大升级时 会安装新版本 新升级中缺少的功能也将从现有文件夹结构中删除 但在 添加或删除程序 中我仍然可以找到这两个安装 我已在 Bootstrapper
  • Cassandra 中按时间戳排序最新记录

    我正在尝试显示传感器列表中的最新值 该列表还应该可以按时间戳排序 我尝试了两种不同的方法 我在主键中包含了传感器的更新时间 CREATE TABLE sensors customerid int sensorid int changedat
  • 每次在 Spring 上测试后重置数据库而不使用 DirtiesContext

    我想知道是否有某种方法可以在每次集成测试后重置数据库without DirtiesContext DirtiesContext classMode DirtiesContext ClassMode AFTER EACH TEST METHO
  • 模糊事件停止点击事件

    示例代码 http jsfiddle net slolife PnmxM http jsfiddle net slolife PnmxM 我问这个问题虽然有很多类似的问题 但我觉得它们不一样 我有一个文本框 当它模糊时 应该执行某些操作 我
  • 数据注释标签放在哪里?

    我正在使用 pro asp net mvc 2 0 框架 似乎他将数据注释标记放在也生成 linq to sql 的类上 Table Name Products public class Product HiddenInput Displa
  • /tmp/hive 上的 Powershell chmod 用于 winutils 和 hadoop/spark

    我目前正在尝试将在测试堆栈上设置 Spark Hadoop 的过程合并到我们的 powershell 脚本中 这是一个 Windows 环境 有些地方会出现问题 但这是最糟糕的 当我手动安装时 我可以运行 HADOOP HOME bin w
  • iPhone:如何下载完整的网站?

    您建议我使用哪种方法将网站 一个包含所有包含图像的 HTML 网站 下载到 iPhone 问题是如何抓取所有这些微小的部分 Javascript 图像 CSS 并将它们保存在本地 这与具体实现无关 我知道如何使用 NSURLRequest
  • 使用 Google Apps 脚本记录

    我有两个关于使用应用程序脚本进行日志记录的问题 1 我有两个 gs 文件 在同一个项目中 一个 F1 正在通过以下方式呼叫另一个 F2 urlfetch POST 请求 这Logger log在 F1 中工作得很好 但在 F2 中却不行 也
  • 为什么链接描述文件有多个节命令?

    我一直在读ld 的部分文档 https access redhat com documentation en US Red Hat Enterprise Linux 4 html Using ld the GNU Linker sectio
  • 如何使用指定类路径的命令行从 jar 运行类

    我正在尝试从 JAR 运行一个类 这个类不是这个 jar 中唯一的主类 此外 它还需要许多其他 jar 文件 我将它们保存在与此 Jar 相同的目录中 我尝试过的命令如下 mydir是我所有jar所在的目录 使用Windows平台 mysq
  • 有没有办法在 Windows 上的 Ubuntu 上的 Bash 中使用 Notepad++ 打开文件?

    我使用的是 Windows 10 但我在 Windows 上的 Ubuntu WSL 上使用 Bash 来熟悉 Linux 命令行 我正在尝试充分利用它的功能 并且认为能够打开 比方说 会很棒 index html从 Notepad 中的
  • 如何使用node.js编译lesscss

    Hi 我已经使用以下代码完成了我的网站编码lesscss客户端现在想要编译less所以我已经下载了node js 我的网站在本地主机上运行 我想首先知道 我必须在哪里安装node js 接下来我要做什么 命令行工具 命令行等 如果有人可以帮
  • 我将一些值发送到另一个网址以及关于此的信息

    我使用 spring httpClient 将一些值发送到其他网址 关于这个问题 据我所知 如果我发送name mister age 30 values 收到的页面得到的值不是 http 状态值 对吧 HTTP 状态值用于发送页面而不是接收
  • 如何在 Spring Boot 应用程序中更改服务器?

    My project requirement is to use another server than tomcat How can we change embedded server from spring boot applicati
  • 重新加载/刷新 iframe 的最佳方法是什么?

    我想重新加载使用 JavaScript 到目前为止我发现的最好的方法是设置 iframesrc归因于自身 但这不是很干净 有任何想法吗 document getElementById some frame id contentWindow
  • 只加载 Ruby 中正在使用的类?

    如果我加载x rb 然后加载该文件中的所有类 https stackoverflow com questions 10001106 does requiring a gem load everything including things