ruby-on-rails - 根据变量名动态调用方法
问题描述
我有一个应用程序可以根据用户选择的“速度”计算运费。我正在尝试根据这些速度重构这个 if 语句。这是当前的 if 语句:
def walk_thru_each_rate_type(speed_hash, speed_from_db)
if speed_hash.has_key?("flex")
handle_flex_rates(speed_from_db)
end
if speed_hash.has_key?("fixed")
handle_fixed_rates(speed_from_db)
end
if speed_hash.has_key?("free")
handle_free_shipping(speed_from_db)
end
end
所以每种方法都只是基于“速度”。flex, fixed or free
并且方法名称中包含这些速度。我在想这样的事情,但它不起作用:
handle_"#{speed}"_rates(speed_from_db)
如何根据速度名称动态调用我的方法?
解决方案
您可以调用 Object#send 传递方法名称和参数。在你的情况下,它会像:
self.send("handle_#{speed}_rates", speed_from_db)
推荐阅读
- excel - VBA 仅从另一个工作簿更新和插入新数据
- c# - 当进程退出事件触发不起作用时,C#启用/禁用用户表单
- excel - 将信息从一个文件传输到最终文件
- swift - Swift Scene Delegate 在首次启动时不运行代码
- c# - LINQ 分组依据
- kotlin - 在 Kotlin 中传递 StringBuilder::append 作为参数
- pytorch - ImportError:TensorBoard 日志记录需要 TensorBoard 1.15 或更高版本
- java - 使用 Java 和 Jolt 将 Json 字符串转换为 Json
- python - 使用 matplotlib 在一个图中绘制两个子图
- mongodb - mongoose updateOne 功能:如果 $pull 不起作用则不更新