W ten sam sposób, w jaki możemy uzyskać dowolny obiekt (lub klasę) w języku Ruby, aby wyświetlić listę jego metod, czy istnieje jakaś funkcja w eliksirie, aby wyświetlić wszystkie funkcje należące do modułu? Coś (przynajmniej zdalnie), np. String.functions
(gdzie String
może być zastąpiony przez dowolną inną nazwę modułu)?Czy w Elixir istnieje jakiś sposób, aby moduł mógł wyświetlić listę jego funkcji?
43
A
Odpowiedz
62
Każdy moduł w Elixir definiuje funkcję __info__
, którą możesz wywołać, aby uzyskać informacje o tym module.
Zgodnie z Elixir Docs, można go przekazać :functions
, aby uzyskać listę funkcji, które zawiera ten moduł.
Map.__info__(:functions)
[delete: 2, drop: 2, equal?: 2, fetch: 2, fetch!: 2, from_struct: 1, get: 2,
get: 3, has_key?: 2, keys: 1, merge: 2, merge: 3, new: 0, pop: 2, pop: 3,
put: 3, put_new: 3, size: 1, split: 2, take: 2, to_list: 1, update: 4,
update!: 3, values: 1]
20
Ponieważ Elixir to również Erlang, istnieje sposób, aby to zrobić Erlang.
Każdy moduł Elixir i Erlang ma funkcję module_info
zdefiniowaną podczas kompilacji czasu. Istnieją dwie arytmy tej funkcji. Na przykład:
iex(1)> Atom.module_info
[module: Atom,
exports: [__info__: 1, to_string: 1, to_char_list: 1, module_info: 0,
module_info: 1], attributes: [vsn: [66271031909514292894123295368320335064]],
compile: [options: [:debug_info], version: '6.0.1',
time: {2015, 9, 29, 2, 34, 37},
source: '/private/tmp/elixir20150928-10892-fvin6a/elixir-1.1.1/lib/elixir/lib/atom.ex'],
native: false,
md5: <<49, 219, 86, 35, 141, 153, 70, 174, 245, 100, 68, 5, 62, 231, 60, 216>>]
Można określić konkretny atrybut do zwrócenia.
iex(2)> Atom.module_info(:exports)
[__info__: 1, to_string: 1, to_char_list: 1, module_info: 0, module_info: 1]
Erlang funkcja Verison:
iex(3)> :crypto.module_info(:exports)
[version: 0, stop: 0, supports: 0, info_lib: 0, hash: 2, hash_init: 1,
hash_update: 2, hash_final: 1, hmac: 3, hmac: 4, hmac_init: 2, hmac_update: 2,
hmac_final: 1, hmac_final_n: 2, block_encrypt: 4, block_encrypt: 3,
block_decrypt: 3, next_iv: 2, next_iv: 3, stream_init: 3, stream_init: 2,
stream_encrypt: 2, stream_decrypt: 2, rand_bytes: 1, strong_rand_bytes: 1,
rand_bytes: 3, rand_uniform: 2, rand_seed: 1, mod_pow: 3, verify: 5, sign: 4,
public_encrypt: 4, private_decrypt: 4, private_encrypt: 4, public_decrypt: 4,
exor: 2, generate_key: 2, generate_key: 3, compute_key: 4, md5: 1, md5_init: 0,
md5_update: 2, md5_final: 1, md4: 1, md4_init: 0, md4_update: 2, md4_final: 1,
sha: 1, sha_init: 0, sha_update: 2, ...]
To właśnie funkcja autouzupełniania iex wykorzystuje który pozwala rozszerzyć funkcje zarówno Elixir i Erlang.
Powiązane problemy
- 1. Czy istnieje sposób, aby programowo wyświetlić listę wszystkich zależności gradle?
- 2. Czy istnieje sposób, aby wyświetlić listę funkcji Prelude z konsoli Haskell?
- 3. Czy jest jakiś sposób, aby wyświetlić plan wykonania programu?
- 4. Czy istnieje sposób, aby zobaczyć listę funkcji w module, w GHCI?
- 5. Czy istnieje jakiś sposób, aby przesłać postęp poprawnie HttpUrlConncetion
- 6. Czy istnieje sposób, aby wyświetlić wszystkie trasy na serwerze Hapi
- 7. Czy istnieje sposób, aby wyświetlić własne uprawnienia svn
- 8. W Elixir, w jaki sposób można przekształcić zakres w listę?
- 9. Czy istnieje sposób, aby wkroczyć zdobione funkcji, omijając kod dekorator
- 10. Zapytaj GDB, aby wyświetlić listę wszystkich funkcji w programie.
- 11. narzędzie linux, aby wyświetlić listę wszystkich funkcji w pliku źródłowym?
- 12. Czy istnieje jakiś standardowy moduł gui do aplikacji węzła?
- 13. Czy istnieje jakiś typ funkcji w języku Cython?
- 14. Czy istnieje sposób obejścia problemu, aby członek struktury był w jakiś sposób "prywatny" w C?
- 15. Czy istnieje jakiś sposób, aby wykryć, czy tabela bazy danych istnieje z laravel
- 16. Eclipse jak wyświetlić bezpośrednio listę dostępnych funkcji
- 17. Czy istnieje jakiś powód, aby ukrywać dziedziczone elementy w interfejsie?
- 18. Czy istnieje sposób, aby wyczyścić django.db.connection.queries?
- 19. Czy istnieje sposób, aby prześledzić wywołanie funkcji javascript?
- 20. Czy istnieje jakiś rodzaj CacheDependency w System.Runtime.Caching?
- 21. Jak wyświetlić listę wszystkich funkcji w module Pythona?
- 22. Czy istnieje sposób w skrypcie powłoki, aby dowiedzieć się, gdzie jego wynik jest przekierowywany?
- 23. Czy jest jakiś sposób, aby atrybut title = działał w Chrome?
- 24. Czy jest jakiś sposób, aby Guice Grapher zadziałał?
- 25. Jak wyświetlić listę pobrań zasobów
- 26. Czy istnieje sposób, aby uzyskać listę wszystkich bieżących tabel tymczasowych w SQL Server?
- 27. Dragover - czy istnieje jakiś problem?
- 28. Czy istnieje jakiś sposób, aby zobaczyć numer w to 64-bitowy pływaka IEEE 754 reprezentacja
- 29. Czy istnieje jakiś sposób, aby uzyskać 64-bitowego time_t w programie 32-bitowego Linuksa
- 30. Czy istnieje jakiś sposób, aby utworzyć plon utworzony Iterator Przejdź do następnego elementu w wyjątku?
Aktualizacja: zmiana mojej odpowiedzi na użycie ': functions' zamiast': exports'. Obie działają, ale '': functions' wygląda najlepiej, zgodnie z dokumentami. –
Czy istnieje również sposób na uzyskanie go w kolejności zdefiniowanej w module? Jest teraz uporządkowany alfabetycznie. – Phillipp