Discuz! Board

 找回密码
 立即注册
查看: 336|回复: 0

学习 Ruby 元编程,造福人类

[复制链接]

10

主题

10

帖子

32

积分

新手上路

积分
32
发表于 2024-2-14 16:27:21 | 显示全部楼层 |阅读模式
Ruby 元编程可能是一件好事。 最近,我正在审查我的一名学生的代码。他有一个程序有很多方法可以打印出各种消息,例如我建议他将这些消息存储在一个单独的文件中,以简化处理它们的过程。然后,我想起了I18n 翻译是如何存储在 Rails 中的,并有了一个想法。为什么我们不创建一个包含所有消息的 YAML 文件(所谓的字典)和一个辅助方法来正确获取它们,同时支持插值等附加功能? Ruby 的元编程完全可以实现这一点! 这就是messages_dictionary gem(主要是为了学习目的而创建)的诞生 - 我什至在我的其他几个项目中使用了它。因此,在本文中,我们将在从头开始编写这个 gem 时看到 Ruby 元编程的实际应用。 宝石基本结构 让我快速介绍一下 gem 的文件和文件夹: 宝石文件 包含系统信息的gemspec。

您可以在 GitHub 上查看 gem 的源代码,看看它们的外观。 Rakefile包含启动用 RSpec 编写的测试的指令。 .rspec包含 RSpec 的选项。例如,在这种情况下,我希望测试以随机顺序运行,默认情况下应该需要spec_helper.rb文件,并且输出应该以详细颜色显示。当然,这些选项也可以 赌号数据 在从终端运行 RSpec 时设置。 .travis.yml包含Travis CI服务的配置,该服务自动为每个提交或拉取请求运行测试。这是一项非常棒的服务,所以如果您以前从未见过,请尝试一下。 README.md包含 gem 的文档。 spec/包含用 RSpec 编写的所有测试。我不会在本文中介绍测试,但您可以自行研究它们。 lib/包含 gem 的主要代码。 让我们在lib目录中开始工作。首先,创建一个messages_dictionary.rb文件和一个messages_dictionary文件夹。




messages_dictionary.rb将需要所有第三方 gem,以及一些其他文件,并定义我们的模块。有时配置也放在这个文件中,但我们不会这样做。 'hashie' module MessagesDictionary end 相当简约。请注意,此 gem 有两个依赖项: YAML 和Hashie。 YAML 将用于解析.yml文件,而 Hashie 为基本 Array 和 Hash 类提供了一堆非常酷的扩展。打开此 RubyGems 页面,请注意 Hashie 位于“依赖项”部分下。这是因为在 gemspec 中我们有以下行解析器是 Ruby 核心的一部分,但 Hashie 是自定义解决方案,因此我们必须将其指定为依赖项。 现在在lib/messages_dictionary中创建一个version.rb文件 的版本定义为常量是一种常见的做法。接下来,在 gemspec 文件中引用此常量另请注意,所有 gem 的代码都在 module 下命名MessagesDictionary。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|NFT数字藏品交易-全球交流论坛

GMT+8, 2024-11-24 01:05 , Processed in 0.083458 second(s), 20 queries .

NFTOTC!

快速回复 返回顶部 返回列表