gpt4 book ai didi

ruby - 在 Ruby 中按名称获取类?

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

有一个包含模块和类名的字符串,例如:

"Admin::MetaDatasController"

我如何获得实际类(class)?

如果没有模块,则以下代码有效:

Kernel.const_get("MetaDatasController")

但它会破坏模块:

ruby-1.8.7-p174 > Kernel.const_get("Admin::MetaDatasController")
NameError: wrong constant name Admin::MetaDatasController
from (irb):34:in `const_get'
from (irb):34
ruby-1.8.7-p174 >

最佳答案

如果你想要一些简单的东西来处理你的特殊情况,你可以写

Object.const_get("Admin").const_get("MetaDatasController")

但是如果你想要更通用的东西,在 :: 上拆分字符串并一个接一个地解析名称:

def class_from_string(str)
str.split('::').inject(Object) do |mod, class_name|
mod.const_get(class_name)
end
end

the_class = class_from_string("Admin::MetaDatasController")

在第一次迭代中,Object 被要求提供常量 Admin 并返回 Admin 模块或类,然后在第二次迭代中返回该模块或类要求常量 MetaDatasController,并返回该类。由于没有更多组件从该方法返回该类(如果有更多组件,它将迭代直到找到最后一个)。

关于ruby - 在 Ruby 中按名称获取类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3163641/

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