gpt4 book ai didi

ruby-on-rails - 如何在模块中使用动态选择的类

转载 作者:太空宇宙 更新时间:2023-11-03 18:29:05 24 4
gpt4 key购买 nike

我很确定这是一个无用的标题...抱歉。

我希望能够将一个类传递给一个方法,然后使用该类。这是一个简单、有效的示例:

def my_method(klass)
klass.new
end

使用它:

>> my_method(Product)
=> #<Product id:nil, created_at: nil, updated_at: nil, price: nil>
>> my_method(Order)
=> #<Order id:nil, created_at: nil, updated_at: nil, total_value: nil>

什么工作是尝试在模块上使用klass变量:

>> ShopifyAPI::klass.first
=> NoMethodError: undefined method `klass' for ShopifyAPI:Module

我是在尝试一项不可能完成的任务吗?任何人都可以阐明这一点吗?

干杯

最佳答案

首先,我认为这不可能

当然,没有为模块定义 klass 方法 <- 这是真的,因为 ShopifyAPI.methods.include? "klass"# => false

但是,类在模块中是常量。模块有一个 constants 方法,您可以使用它来检索 类。这个 is 方法的问题在于它还会检索非类模块中的常量。

我想出了这个解决方法来解决你的问题

# get all the classes in the module
klasses = ShopifyAPI.constants.select do |klass|
ShopifyAPI.const_get(klass).class == Class
end

# get the first class in that list
klasses.first

关于ruby-on-rails - 如何在模块中使用动态选择的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6856419/

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