2010-12-31 10 views
13

Pracuję nad biblioteką, która wymaga refleksji i potrzebuje informacji specyficznych dla Scala, w przeciwieństwie do tego, co jest dostępne za pośrednictwem standardowego API Java Reflect. W tej chwili używam nieudokumentowanego kodu w skalap (odpowiednik javaska Scala) i próbuję powiązać dane, które dostarcza z obiektami odbijającymi Java, aby móc wywoływać metody i takie (skalap po prostu analizuje pliki klas).Czy istnieje odpowiednia biblioteka refleksji dostępna dla Scala?

znalazłem to, ale tam nic nie ma ... https://github.com/dubochet/scala-reflection

... i rozglądałem repo SVN Scala śladów nim i nie udało się go znaleźć tam, albo (ale to może być ja właśnie tęskniłem).

Czy ktoś wie o bibliotece odbić Scala, która dostarcza informacji podobnych do tego, co zapewnia skalap, ale także pozwala na wywoływanie metod, pól dostępu itp. Jak biblioteka refleksyjna Java?

[Edytuj]

przypuszczam aby powinien wyjaśnić jaśniej, co usiłuję zrobić ...

Chcę napisać bibliotekę, która będzie miała plik, powiedzmy rozdzielany plik tekstowy lub Arkusz roboczy w pliku Excel, z nagłówkami u góry i Manifestem, i zwrócony Seq obiektów. Więc w zasadzie to funkcja, która wygląda następująco:

def parseFile[T](fileName: String)(implicit manifest: Manifest[T]): Seq[T] = { 
    // lots of magic ... 
} 

W ogólnym przypadku to chyba nie jest to możliwe, i jestem pewien, że istnieje wiele „możliwych” przypadków, które są niezwykle trudne, ale myślę, istnieje użyteczny podzbiór, który można zaimplementować bez zbytniej złożoności, gdy tylko dostanę zawiesinę skalap (lub scala.reflect, oba są podobne, ale różne ...) i poślubię je do odpowiednich obiektów w interfejsie API Java Reflect. Moim podstawowym planem jest przyjrzeć się nagłówkom pliku, spojrzeć na nazwy parametrów i typy publicznych konstruktorów i zastosować metody na obiekcie towarzyszącym, wybrać ten, który najlepiej pasuje do pliku, i przeanalizować plik w obiektach. To jest dla czegoś bliżej skryptów niż budowania aplikacji. Dlatego głównie szukam czegoś, co zaoszczędziłoby mi czasu.

Tak więc biblioteka, którą piszę, nie ma ani apriorycznej wiedzy o tworzonych przez siebie klasach, ani o niczym poza podstawową strukturą (ograniczonym tekstem tabelarycznym, Excelem itp.) Z pliku, którego używa. Korzystnie powinna być minimalnie inwazyjna.

Robiłem coś podobnego w Pythonie wcześniej, ale było inwazyjne że albo musiał deskryptorów że określone typy potrzebne, albo musiałem uczynić deskryptory akceptują sznurki i zrobić konwersję do odpowiedniego typu . Myślę, że dzięki bogatym informacjom Scali mogę być mniej inwazyjny.

+0

Możesz znaleźć odpowiedzi na moje pytanie pomocne: http: // stackoverflow.com/questions/1469958/scala-how-do-i-dynamicznie-tworzenie-instancji-obiekt-i-wywołanie-a-metoda-używania-refle –

+0

Nie widziałem twojego pytania, ale niestety to nie pomaga, poza dodawaniem do mojej listy referencji. –

+0

Czy uważałeś typy strukturalne za środek do refleksji? – pedrofurla

Odpowiedz

14

To jest możliwe do utworzenia manifestu, refleksyjnie, w czasie wykonywania.

Wprowadź TypeWrangler here on gitub ...

Wystarczy usunąć thge dwie ostatnie metody tej klasy (które są charakterystyczne dla wiosny), i jesteś dobry, aby przejść!

Jedną z tych dni przełożę ten kod do biblioteki pełnego odbicia, wykorzystując również niektóre z logiki podpisu w Skalp. Wygląda na to, że istnieje zapotrzebowanie na coś takiego.

+0

Dzięki za link, na pewno będę angażować się w uhonorowaną czasem tradycję ponownego kopiowania i wklejania z niektórymi z nich. –

+0

@erik - nic nie mówi, że dzięki niemu coś się dzieje. –

+1

@KevinWright: czy to nadal ma miejsce w lutym 10 '14? –

Powiązane problemy