oprócz integracji z dynamicznych języków na JVM, jakie są inne potężne zastosowania w Dynamic type w statycznie wpisywanych języka jak Scala?Praktyczne zastosowania typu dynamiczny Scala
Odpowiedz
Chyba typ dynamiczny mogłyby zostać wykorzystane do realizacji kilku znalezionych w JRuby, Groovy lub innych dynamicznych języków JVM, jak i dynamicznego metaprogramowanie method_missing cech.
Na przykład tworząc dynamiczne zapytanie podobny do Active Record w szynach, gdzie nazwa metody z parametrami przetłumaczone na zapytania SQL w tle. Jest to użycie funkcji method_missing w Ruby. Coś jak to (w teorii - nie próbowano zaimplementować coś takiego):
class Person(val id: Int) extends Dynamic {
def _select_(name: String) = {
val sql = "select " + name + " from Person where id = " id;
// run sql and return result
}
def _invoke_(name: String)(args: Any*) = {
val Pattern = "(findBy[a-zA-Z])".r
val sql = name match {
case Pattern(col) => "select * from Person where " + col + "='" args(0) + "'"
case ...
}
// run sql and return result
}
}
Umożliwienie wykorzystania takiego, gdzie można wywołać metody „name” i „findByName” bez konieczności ich jednoznacznie zdefiniowane w klasie Person :
val person = new Person(1)
// select name from Person where id = 1
val name = person.name
// select * from Person where name = 'Bob'
val person2 = person.findByName("Bob")
Jeśli dynamiczny metaprogramming zostało do dodania, rodzaj dynamicznego byłyby potrzebne, aby umożliwić wywoływanie metod, które zostały dodane podczas wykonywania ..
Czy trzeci przykład nie powinien zawierać kapitału P: 'Person.findByName (" Bob ")'? – anishpatel
można również użyć go do cukru składniowej na mapach:
class DynamicMap[K, V] extends Dynamic {
val self = scala.collection.mutable.Map[K, V]()
def _select_(key: String) = self.apply(key)
def _invoke_(key: String)(value: Any*) =
if (value.nonEmpty) self.update(key, value(0).asInstanceOf[V])
else throw new IllegalArgumentException
}
val map = new DynamicMap[String, String]()
map.foo("bar") // adds key "foo" with value "bar"
map.foo // returns "bar"
Szczerze mówiąc to tylko zaoszczędzić parę klawiszy od:
val map = new Map[String, String]()
map("foo") = "bar"
map("foo")
Należy zauważyć, że ten przykład nie działa z kilku powodów, ale nie sądzę, że warto zbadać to jeszcze bardziej, zanim funkcja będzie bardziej stabilna. –
Zrobiłem to działa tutaj: [http://stackoverflow.com/questions/14876856/simple-scala-macro] –
Odersky mówi główną motywacją była integracja z dynamicznych języków: http://groups.google.com/group/scala-language/msg/884e7f9a5351c549
[edytuj] Martin dalsze potwierdza to here
- 1. jQuery .each() - Zastosowania praktyczne?
- 2. Praktyczne zastosowania poziomu izolacji Seralization?
- 3. Jakie są praktyczne zastosowania XOR w algorytmach
- 4. Jawne zachowanie konstruktora kopiowania i praktyczne zastosowania
- 5. Jakie są praktyczne zastosowania wzoru metody Factory?
- 6. Praktyczne przykłady zastosowania dla nowego some- Clojure za> makro
- 7. Jakie są praktyczne zastosowania algorytmów najniższego wspólnego przodka?
- 8. Dynamiczny nie respektuje typu zwrotu
- 9. Parametr dynamiczny w szablonie Scala dla PlayFramework
- 10. Czy istnieje praktyczne zastosowanie wskaźnika "volatile restrict"?
- 11. Ćwiczenia praktyczne?
- 12. Niefinansowe zastosowania blockchain
- 13. Ograniczenia parametrów typu Scala
- 14. Scala typu deferring
- 15. Zbierz argumenty do zastosowania do funkcji curry w Java/Scala
- 16. Scala typu badania z wzbogacaniem
- 17. Równość Scala z sprawdzaniem typu?
- 18. Problem dotyczący typu Scala (wnioskowania)?
- 19. Problemy generalizujące klasy typu Scala
- 20. Scala błąd alias rekurencyjne typu
- 21. Błąd w systemie typu Scala?
- 22. typu Scala granice i wariancji
- 23. Praktyczne wykorzystanie pamięci wirtualnej
- 24. Scala podczas niezgodności typu (true)? Nieskończona pętla w scala?
- 25. Scala zależna od typu ścieżek i proofów poziomu typu
- 26. Nie można znaleźć nazwy typu lub przestrzeni nazw "dynamiczny".
- 27. jakie jest praktyczne zastosowanie System.Transactions?
- 28. Praktyczne przykłady Testowanie kodu C#
- 29. Praktyczne zastosowanie backticks w Swift
- 30. Powrót typu scala dla funkcji krotek
Bez obsługi języków (np. 'dynamic' w C# .4), tak naprawdę nie" widzę ", co dzieje się z tym zatwierdzeniem. Byłoby interesujące zobaczyć, w jaki sposób pasuje. –
Odpowiedzi na to pytanie są bardzo nieaktualne, ponieważ rzeczywiste odpowiedzi patrz: [Jak działa typ Dynamiczny i jak go używać?] (Http://stackoverflow.com/q/15799811/465304) – sschaef