Vấn đề ở đây là khái niệm của bạn hoàn toàn thiếu sót. Bạn đang gán một bản đồ cho Lớp chứ không phải bản đồ với dòng này:
User.metaClass.dynamicAttributes = [:]
Để đạt được những gì bạn đang mong muốn, bạn cần thực hiện những điều sau:
User.metaClass.propertyMissing = { String name ->
if (!delegate.dynamicAttributes) delegate.dynamicAttributes = [:]
delegate.dynamicAttributes[name]
}
User.metaClass.propertyMissing = { String name, value ->
if (!delegate.dynamicAttributes) delegate.dynamicAttributes = [:]
delegate.dynamicAttributes[name] = value
}
Tôi chắc chắn rằng có một cách dễ dàng hơn để thực hiện việc này nhưng phần trên cho thấy một giải pháp trong đó bản đồ được cân bằng cho mỗi trường hợp chứ không phải trên tất cả các trường hợp.