我想通过编写一个动态生成的类方法来干我的代码。将变量传递到Ruby中的动态生成的类
我想是有多个错误类和我有以下代码
红宝石
class ChatPolicy::Error < StandardError
ERROR_CLASSES = [
{ class_name: 'UserBlacklisted', message: 'Message 1' },
{ class_name: 'UserSuspended', message: 'Message 2' },
{ class_name: 'UserNotEligibleToRent', message: 'Message 3' },
{ class_name: 'MembershipTierNotAllowed', message: 'Message 4' }
]
ERROR_CLASSES.each do |cls|
Object.const_set(cls[:class_name], Class.new {
attr_reader :object
def initialize(object)
@object = object
@message = cls[:message]
end
})
end
end
然而,由于在Class.new {}
块,变量不能被通过。我不能初始化消息变量。我想知道如何才能做到这一点?
谢谢@matt。它现在有效,但控制台发出警告。 '1:警告:顶级常量UserSuspended由ChatPolicy :: Error :: UserSuspended引用我想知道它是如何解决的? –
**更新**实际上它不起作用,因为当我在控制台中键入ChatPolicy :: Error :: UserSuspended时,它变成了'UserSuspended' –
基于@ mudasobwa的解决方案找到了解决方案。它不应该需要'Object.const_set'只使用'const_set' –