programing

클래스를 선언하지 않고 객체를 생성 할 수 있습니까?

nasanasas 2020. 12. 24. 23:49
반응형

클래스를 선언하지 않고 객체를 생성 할 수 있습니까?


클래스를 선언하지 않고 객체를 생성 할 수 있습니까? JavaScript 에서처럼obj = {a: '1'}; console.log(obj.a)


Groovy에서는 항상 생성되는 객체의 클래스를 제공해야하므로 Groovy에는 JavaScript의 객체 리터럴 구문에 해당하는 것이 없습니다.

그러나 Groovy는에 대한 리터럴 구문을 Map가지고 있으며 개념적으로 JavaScript 객체와 매우 유사합니다. 즉, 둘 다 속성 또는 이름-값 쌍의 모음입니다.

위의 JavaScript에 해당하는 Groovy 코드는 다음과 같습니다.

def obj = [a: '1']
println obj.a

여기에 사용 된 클래스 이름이 없더라도 여전히 특정 클래스 ( java.util.LinkedHashMap) 의 개체를 만들고 있습니다. 위의 코드는 다음과 같은 축약 형입니다.

def obj = new LinkedHashMap();
obj.a = '1'
println obj.a

Expando클래스 는 JavaScript 객체와 훨씬 더 유사하며, 클래스 정의의 "오버 헤드"를 피하거나 런타임시 임의의 속성을 추가 할 수있는 동적 객체를 원할 때 유용합니다.


아무도 Expando 클래스를 언급하지 않았다는 사실에 약간 놀랐습니다. 이렇게하면 함수 내에서 속성을 직접 참조 할 수 있다는 점에서지도에 추가 기능이 추가됩니다. 아래 코드 예.

def expando = new Expando(a:"def")
expando.run = {def b ->
println("$a")
println("$b")
}
expando.run("ABC")

def map = [a:"def"]
map.run = {def b ->
 println("$a") //THIS DOES NOT WORK.  You will get a missing property exception.
 println("$b")
}
map.run("ABC")

인쇄 된 출력 :

데프

알파벳

groovy.lang.MissingPropertyException

ABC (map.run에서 println ($ a)를 주석 처리하면 println ($ b)는 ABC를 인쇄합니다)

출력에서 추가 줄 바꿈을 무시하십시오. 연속 라인에 def와 ABC를 넣는 데 시간이 많이 걸렸습니다.

자세한 내용은 Expando API 문서 를 참조하십시오.


Groovy는 json과 동등한 표기법을 가지고 있습니다. 유일한 차이점은 {} 대신지도에 [:]를 사용한다는 것입니다. 따라서 json을 그루비 객체 표기법으로 명확하게 변환 할 수 있습니다.

import groovy.json.JsonOutput

def obj = [:] //define map
obj.batsmen = [] //define array 
def b = [:] 
b.name= "V. Kohli"
b.score = 55
b.strike = false

obj.batsmen.push(b)

//push second object
obj.batsmen.push(b)
println JsonOutput.toJson(obj)

여기에서는 개체를 직접 인쇄하지 않았습니다. 대괄호 표기법으로 인쇄되기 때문입니다.

전체 기사를 읽으십시오. 자바 스크립트 개발자를위한 Groovy. https://metamug.com/article/groovy-for-javascript-developers.php

참조 URL : https://stackoverflow.com/questions/9312805/is-it-possible-to-create-object-without-declaring-class

반응형