我想通過編寫一個動態生成的類方法來幹我的代碼。將變量傳遞到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' –