ruby-on-rails - 在 Rails 中向 Integer 类添加方法的最佳位置在哪里?

标签 ruby-on-rails ruby monkeypatching

在 Rails 中向整数类添加方法的最佳位置在哪里? 我想添加一个 to_metersto_miles 方法。

最佳答案

如果您决心使用数字(或整数等)类来进行单位转换,那么至少要在逻辑上做到这一点,并具有一些实际值(value)。

首先,创建一个 Unit 类,用于存储单位类型(米、英尺、肘等)和创建时的值。然后向 Numeric 添加一堆方法,这些方法对应于单元可以具有的有效值:这些方法将返回一个单元对象,其类型记录为方法名称。 Unit 类将支持一组 to_* 方法,这些方法将转换为具有相应单位值的另一种单位类型。这样,您可以执行以下命令:

>> x = 47.feet.to_meters
=> 14.3256
>> x.inspect
=> #<Unit 0xb795efb8 @value=14.3256, @type=:meter>

处理它的最佳方法可能是 Unit 类中的转换类型和表达式矩阵,然后使用 method_missing 检查给定类型是否可以转换为另一种类型。在数字类中,使用 method_missing 询问 Unit 是否支持给定方法作为单元类型,如果支持,则使用数字作为其值返回请求类型的单元对象。然后,您可以通过向扩展转换矩阵的 Unit 添加 register_type 和 register_conversion 类方法来支持在运行时添加单位和转换,而 Numeric 将“自动”获得该功能。

至于放在哪里,创建一个 lib/units.rb 文件,其中也包含 monkey_patch 到 Numeric,然后在 config/environment.rb 中初始化它,但需要 lib/units.rb 文件。

关于ruby-on-rails - 在 Rails 中向 Integer 类添加方法的最佳位置在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/266819/

相关文章:

ruby-on-rails - 路由将 JSON 请求解释为 HTML?

ruby - 如何正确地对 Ruby 进行 monkeypatch?

ruby-on-rails - 如何对现有的 gem(Rails 引擎)进行 monkeypatch?

ruby-on-rails - 在 Rails 中保存视频文件

ruby-on-rails - Ruby 字符串到日期的转换

ruby-on-rails - 生产中的 bundler 不会忽略开发和测试 gem

python - 模拟上的相同调用链是否总是返回完全相同的模拟对象?

ruby-on-rails - rails 多态关联(遗留数据库)

ruby-on-rails - NameError:未初始化的常量 Rails::TestTask

ruby - 方法名称末尾的 "!"和 "?"的用途是什么?