如何通过iex显示来自命名函数的typespec

问题描述 投票:2回答:1

您可以通过iex上的t命令显示模块中的typespecs,即:

iex(1)> t Enum
@type t() :: Enumerable.t()
@type acc() :: any()
@type element() :: any()
@type index() :: integer()
@type default() :: any()

但是如何从例如Enum.reverse中看到typespecs?

如果我转到源代码,那么我明白了

  @spec reverse(t) :: list
  def reverse(enumerable)

在哪里我认为t代表Enum本身@type t() :: Enumerable.t()并期望返回list

例如在python中你可以通过shell使用??得到一个方法doc(python没有实现typespecs但是你明白了)

In [1]: from urllib2 import urlparse
In [2]: urlparse??
def urlparse(url, scheme='', allow_fragments=True):
    """Parse a URL into 6 components:
    <scheme>://<netloc>/<path>;<params>?<query>#<fragment>
    Return a 6-tuple: (scheme, netloc, path, params, query, fragment).
    Note that we don't break the components up in smaller bits
    (e.g. netloc is a single string) and we don't expand % escapes."""
elixir iex typespec
1个回答
2
投票

IEx.Helpers.h/1打印typespec以及函数文档:

iex(1)> h Enum.reverse/1

                            def reverse(enumerable)

    @spec reverse(t()) :: list()

Returns a list of elements in enumerable in reverse order.

## Examples

    iex> Enum.reverse([1, 2, 3])
    [3, 2, 1]

在快速阅读IEx.Helpers模块之后,我认为没有内置辅助函数只能打印函数的typespec。

编辑:@spec未在Elixir(1.5.3)的当前稳定版本中打印。此功能will be present在Elixir 1.6中。

© www.soinside.com 2019 - 2024. All rights reserved.