클래스를 선언하지 않고 객체를 생성 할 수 있습니까?
클래스를 선언하지 않고 객체를 생성 할 수 있습니까? 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
'programing' 카테고리의 다른 글
UriFormatException : 잘못된 URI : 잘못된 포트가 지정되었습니다. (0) | 2020.12.24 |
---|---|
__init__를 호출하지 않고 클래스를 인스턴스화하는 방법이 있습니까? (0) | 2020.12.24 |
외래 키의 장고 역방향 조회 (0) | 2020.12.24 |
Python에서 XSLT를 사용하여 XML 파일을 변환하는 방법은 무엇입니까? (0) | 2020.12.24 |
Google지도 반응 형 크기 조정 (0) | 2020.12.24 |