#grails #groovy
#grails #groovy
Вопрос:
В JavaScript вы можете сделать следующее:
var obj = {
property: 1,
method1: function() {
//...
},
method2: function() {
//...
}
};
obj.method1()
Мне интересно, существует ли для этого эквивалент groovy (карта, содержащая метод). Я знаю, что это похоже на класс, но мне не нужен класс ha..
Ответ №1:
Да, вы можете поместить замыкания внутри карты. Но это не способ получить объекты в Groovy. Не существует понятия «это», которое знает о карте.
def obj = [
inc: { it 1 }
]
println obj.inc(10)
Комментарии:
1. Спасибо, это то, что я искал! Я пробовал различные формы синтаксиса, кроме вашего ответа. Также полезно знать об «этом».
Ответ №2:
Итак, Javascript не является ООП. У них есть ОБЪЕКТЫ, но это все. То, что вы показываете, является ОБЪЕКТОМ.
В Groovy вы можете сделать это с помощью класса, который может создавать экземпляр объекта, а затем вы можете сделать это с объектом. Например, вы можете создать CommandObject (который, вероятно, вам нужен), а затем заполнить свойства, как вы хотите, или заполнить их при создании экземпляра. Например (используя приведенный выше пример):
def paramsDesc = new ParamsDescriptor()
paramsDesc.paramType = 'paramtype'
paramsDesc.keyType = 'keyType'
paramsDesc.name = 'name'
paramsDesc.idReferences = 'id'
paramsDesc.description = 'desc'
paramsDesc.mockData = 'mock'
paramsDesc.values = []
ИЛИ (если вы создаете конструктор) вы можете создать все сразу:
def paramsDesc = new ParamsDescriptor('paramtype','keyType','name','id','desc','mock',[])
CommandObjects могут иметь методы и функции (как указано выше). Но вам просто нужно сначала создать их экземпляр (def paramsDesc = new ParamsDescriptor())
В этом разница между классом и объектом; думайте о классе как о схеме, а об объекте как о том, что создается из схемы.