Jest to dobrze znany fakt, że typy struktur są wdrażane poprzez odbicie. Czy są jakieś inne konstrukcje językowe, które używają refleksji?Które funkcje Scala są wewnętrznie implementowane za pomocą odbicia?
Odpowiedz
ta jest ściśle związana z typów konstrukcyjnych, ale każdy anonimowy obiekt instancji, tj
new { def print = ("hello world") }.print
użyje refleksji.
http://scala-programming-language.1934581.n4.nabble.com/Structural-types-reflection-td3071599.html
+1: Ma to wpływ na definicję niejawnych konwersji, więc warto to wskazać osobno. W skrócie, zawsze definiuj * nazwaną * klasę poza funkcją 'implicit' i definiuj * oddzielną * niejawną funkcję do konwersji na tę klasę. –
To jest dokładnie to, co robię, kiedy definiuję niejawną konwersję w celu dodania metody do klasy - czas na zmianę. – Russell
Jeśli wziąć pod uwagę isInstanceOf/asInstanceOf jako odbicie, a następnie dopasowanie wzór opiera się na nich
To nie jest konstruktem język, ale ScalaTest obejmuje Suite.execute
, który wykorzystuje odbicia odnaleźć i wywoływać metody testowe.
Czy Scala używa pattern matching jakiejkolwiek refleksji za kulisami?
Afaik, dopasowywanie wzorców używa tylko sprawdzania typu, odlewania typu i metod "unapply". Dla standardowych klas bibliotek kompilator może również generować natywne przełączniki JVM, konstrukcje 'if-else' i inne. Odbicie nie jest tutaj potrzebne. – vadipp
_Co to jest sprawdzanie typu, naprawdę? – matanster
Metoda inwokacja typów strukturalnych zależy od refleksji:
type T = { def startsWith(x:String):Boolean }
def doSomethingWith(x:T) = x.startsWith("abc")
doSomethingWith("abcdef")
OP szczegółowo wymienione rodzaje struktur i poprosił o inne przykłady. –
@pelotom: notice OP to także Ken Bloom. – IttayD
@TelayD: Huh? OP to @Nermin Serifovic –
Wyliczenia użyć refleksji, aby dowiedzieć się o wszystkich możliwych wartości dla wyliczenia dla funkcji nameOf
. (Patrz metoda populateNameMap
w). Robi się to raz, po raz pierwszy wywołujesz nameOf
dla określonego typu Enumeration
.
Scala tłumacza sprawia bardzo intensywne użytkowanie refleksji.
- 1. W jaki sposób interfejsy Java są implementowane wewnętrznie? (vtables?)
- 2. W jaki sposób są implementowane lokalne zmienne leniwy Scala?
- 3. Jak wywołać metodę Scala Object za pomocą odbicia?
- 4. Jak złapać funkcje JavaScript, które są wywoływane?
- 5. Funkcje podnoszące w scala
- 6. Jak określić typy właściwości za pomocą odbicia?
- 7. ffmpeg: które funkcje są wielowątkowe bezpieczne?
- 8. funkcje państwa, które są czasami const
- 9. Znajdowanie parametrów typu za pomocą odbicia w Scali 2.10?
- 10. Scala: funkcje normalne a funkcje korkowane?
- 11. W jaki sposób są implementowane bloki try/catch?
- 12. Android/Java: Wywołanie metody za pomocą odbicia?
- 13. Jak porównać klasy za pomocą odbicia?
- 14. Utwórz nowy obiekt za pomocą odbicia?
- 15. Scala: Jak dynamicznie utworzyć instancję obiektu i wywołać metodę za pomocą odbicia?
- 16. Generowanie kodu za pomocą Scala
- 17. Wykorzystanie _ funkcje lambda Scala
- 18. Jakie funkcje są uważane za zaawansowane python?
- 19. Dziwne zachowanie z odbicia w Scala
- 20. Skąd wiadomo, które funkcje w R są oflagowane do debugowania?
- 21. Jak dokumentować funkcje, które są włączone w SFINAE z Doxygen?
- 22. W jaki sposób implementowane są Głowy Czatu na Facebooku?
- 23. Jak wywołać funkcję variadic skanowania w Golang za pomocą odbicia?
- 24. Konwersja func do predykatu za pomocą odbicia w C#
- 25. „dynamiczne” wywołania metody z nowym Scala odbicia API
- 26. Ustawianie właściwości obiektu za pomocą odbicia o różnych typach właściwości
- 27. Jak mogę uprościć wywołanie metody rozszerzenia Linq za pomocą odbicia?
- 28. Które operacje w równoległych kolekcjach Scala są zrównoleglone?
- 29. Czy te funkcje są rekursywne?
- 30. Funkcje wywołujące zdefiniowane za pomocą skryptu kawy?
Dziękuję wszystkim za odpowiedzi! Nie jestem naprawdę pewien, co robić w tym momencie. Nie byłoby sprawiedliwe, aby przyjąć jedną w tym przypadku, ale nie można również zaakceptować wielu z nich. –
zaakceptuj ten dotyczący anonimowych obiektów, ponieważ jest to jedyny (poza typami strukturalnymi w ogóle), w którym odbicie może spowodować poważne problemy z wydajnością. (Może to tylko ja, ale nie mogę zostawić jednego z moich pytań bez zaakceptowanej odpowiedzi.) –