huma13453 发表于 2024-2-14 16:27:21

学习 Ruby 元编程,造福人类

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文件夹。

https://manchestermassage.net/wp-content/uploads/2024/02/photo_2024-02-14_09-44-29.jpg


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。

页: [1]
查看完整版本: 学习 Ruby 元编程,造福人类