Sınıf beyan etmeden nesne oluşturmak mümkün mü? Groovy ise obj = {a: '1'}; console.log(obj.a)
Sınıf beyan etmeden nesne oluşturmak mümkün mü?
cevap
JavaScript içinde her zaman bir nesnenin sınıf yaratılıyor sağlamalıdır, bu nedenle JavaScript'in nesne değişmezi sözdizimine Groovy eşdeğer yoktur gibi. Bununla birlikte, Groovy, bir JavaScript nesnesine kavramsal olarak çok benzer olan, yani her ikisi de bir özellik ya da isim-değer çifti koleksiyonu olan bir Map
için bir sözdizimsel sözdizimine sahiptir.
yukarıdaki JavaScript eşdeğer Groovy kodudur: Hala belirli bir sınıfın (java.util.LinkedHashMap
) bir nesne oluştururken burada kullanılan hiçbir sınıf adı vardır
def obj = [a: '1']
println obj.a
bile. Yukarıdaki kod sadece kısaltmasıdır:
def obj = new LinkedHashMap();
obj.a = '1'
println obj.a
Expando
class bile belki bir JavaScript nesnesine daha benzer olduğunu ve bir sınıf tanımlama "havai" önlemek veya dinamik bir nesneyi istemek istediğinizde yararlıdır herhangi bir rasgele özellik çalışma zamanında eklenebilir.
Hiç kimse Expando sınıfından bahsetmemişti. Bu, fonksiyonlarınızdaki özellikleri doğrudan referans alabilmeniz için bir harita üzerinde ekstra işlevsellik ekler. Aşağıdaki kod örneği.
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")
baskılı çıkışı:
def
ABC
groovy.lang.MissingPropertyException
ABC (eğer map.run içinde println ($ a) dışarı yorum yaparsanız , println ($ b), ABC'yi yazdırır)
Ek satır sonlarını yoksay çıktıda. Def ve üst üste ardışık satırlarda ABC koyarak bir zaman oldu.
düzenleme: Api da boş harita oluşturmak için bu sözdizimini kullanabilirsiniz
Harika Bul! Ünlü Haki, aynı zamanda Expando sınıfı hakkında da yazmıştır: http://mrhaki.blogspot.com/2009/10/groovy-goodness-expando-as-dynamic-bean.html Expando sınıfının aslında olduğunu söyleyebilirim. sorulan soruya cevap. – Henrik
- 1. C# sınıfında bir nesne olmayan bir nesne oluşturmak mümkün mü?
- 2. Nesne tutarlılığı ile pasta grafikler oluşturmak mümkün mü?
- 3. Roslyn ile bir taşınabilir sınıf kütüphanesi oluşturmak mümkün mü?
- 4. Kendi özel yerel ayarınızı oluşturmak mümkün mü
- 5. Başka bir şubeyi kontrol etmeden ileri atmak mümkün mü?
- 6. ETW'de bir EventSource alt sınıfını oluşturmak mümkün mü?
- 7. node.js ile masaüstü uygulamaları oluşturmak mümkün mü?
- 8. Modelde koşullu bir ilişki oluşturmak mümkün mü?
- 9. Java gibi özel GUI oluşturmak mümkün mü?
- 10. Swagger'da, Websockets için API'ler oluşturmak mümkün mü?
- 11. Sıfırdan bir elips (`...`) nesnesi oluşturmak mümkün mü?
- 12. Objective C'de CLHeading nesnesi oluşturmak mümkün mü?
- 13. Image nesnesinden encodeb64 oluşturmak mümkün mü?
- 14. Bir dizi yapısal örneği oluşturmak mümkün mü?
- 15. Şablon takma adı oluşturmak mümkün mü?
- 16. Dinamik olarak bir UITextView oluşturmak mümkün mü?
- 17. Android'de PDF görüntüleyici oluşturmak mümkün mü?
- 18. Template Haskell'deki işlevlere yorum oluşturmak mümkün mü?
- 19. Chrome'da dinamik tema oluşturmak mümkün mü?
- 20. C++ yöntem çağrı dağıtıcısı oluşturmak mümkün mü?
- 21. CMD'de bir oyun oluşturmak mümkün mü?
- 22. İfade Dili'nde tarih değeri oluşturmak mümkün mü?
- 23. UITableView'dan bir PDF dosyası oluşturmak mümkün mü?
- 24. Özel Viber çıkartmaları oluşturmak mümkün mü?
- 25. TableRow.insertCell() ile bir TH oluşturmak mümkün mü?
- 26. Cordova App çevrimiçi oluşturmak mümkün mü?
- 27. nw.js ile konsol uygulaması oluşturmak mümkün mü?
- 28. Kotlin'de uzatma yapıcılar oluşturmak mümkün mü?
- 29. Yapı/başvuru üyesi olan yalnızca hareketli bir sınıf oluşturmak mümkün mü?
- 30. Python: Hangi özniteliklerin başka bir sınıftan nesneler olabileceğini bir sınıf oluşturmak mümkün mü?
link: def obj = [:] – Hudson
İlginç. Birini merak ederseniz, 'LinkedHashMap' içinde diziler/listeler kullanılmasına izin verilir. Örneğin. bu işler: 'def obj = [a: [1,2," foo "]]; obj.a.push ("bar") ' – Nux