IT Share you

Elixir에서 기능을 나열 할 모듈을 얻을 수있는 방법이 있습니까?

shareyou 2020. 11. 30. 20:15
반응형

Elixir에서 기능을 나열 할 모듈을 얻을 수있는 방법이 있습니까?


루비에서 메소드를 나열하기 위해 어떤 객체 (또는 클래스)를 얻을 수있는 것과 같은 방식으로, 모듈에 속한 모든 함수를 나열하는 Elixir 함수가 있습니까? (적어도 원격으로) String.functions( String다른 모듈 이름으로 대체 될 수있는 )?


Elixir의 각 모듈 __info__은 해당 모듈에 대한 정보를 얻기 위해 호출 할 수 있는 함수를 정의합니다 .

Elixir Docs, 1.6.6 예 에 따르면 :functions모듈에 포함 된 함수 목록을 가져 오기 위해 전달할 수 있습니다.

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]

Elixir는 Erlang이기도하므로이를 수행하는 Erlang 방식도 있습니다.

모든 Elixir 및 Erlang 모듈에는 module_info컴파일 시간에 정의 된 함수가 있습니다. 이 함수에는 두 가지 요소가 있습니다. 예를 들면 :

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>>]

반환 할 특정 속성을 지정할 수 있습니다.

 iex(2)> Atom.module_info(:exports)
  [__info__: 1, to_string: 1, to_char_list: 1, module_info: 0, module_info: 1]

Erlang 함수 버전 :

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, ...]

이것은 Elixir와 Erlang 기능을 모두 확장 할 수 있도록 IEx 자동 완성 기능이 사용하는 것입니다.


나는 iex(1)> exports TargetModuleName. 모듈에 속한 모든 기능과 매크로를 나열합니다. 나는 Map.__info__(:functions)긴 함수 목록을 자르는 것을 멈추는 방법을 알아 내려고 우연히 발견했습니다 .

참고 URL : https://stackoverflow.com/questions/28664119/in-elixir-is-there-any-way-to-get-a-module-to-list-its-functions

반응형