gpt4 book ai didi

ruby-on-rails - 在 Ruby 中,有没有比 'case - when' 更优雅的调用方法的替代方法?

转载 作者:数据小太阳 更新时间:2023-10-29 07:43:29 25 4
gpt4 key购买 nike

在 Rails 3.1 中,我想通过使用接受参数数据的 create 方法来创建一个嵌入式对象,但我想知道是否有比下面的 case 方法更优雅的方法:

def method_call(obj,data)
case obj
when 'a' then User.create_a(data)
when 'b' then User.create_b(data)
when 'c' then User.create_c(data)
end
end

我真的很想做类似下面的事情,但是由于我传递的数据,这会导致错误:

def method_call(obj,data)
User.send("create_#{obj}")(data)
end

有什么建议吗?提前致谢。

最佳答案

send 方法采用与被调用方法相同的参数:

User.send("create_#{obj}", data)

这是否是最优雅的解决方案取决于:我将决策过程留给 User 类,这可能以多种方式发生(例如,发送类似this, Proc 等的散列)工厂服务是另一种选择。

User.create(how, data) # "how" is a, b, c

无论它存在于何处,都要让它显而易见——这使得扩展、修复和推理变得容易。

关于ruby-on-rails - 在 Ruby 中,有没有比 'case - when' 更优雅的调用方法的替代方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8594780/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com