在 Rails 中向整数类添加方法的最佳位置在哪里?
我想添加一个 to_meters
和 to_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/