在另一个装饰函数@spec中指定对Elixir函数@spec的引用

时间:2016-03-21 10:01:30

标签: types elixir

有没有办法在另一个函数规范中引用函数的返回类型规范?

defmodule Car do
  @spec beep(none()) :: String.t
  def beep do
    "beep"
  end

  @spec beep_log(none()) :: String.t
  def beep_log do
    IO.puts "beep log"
    beep
  end
end

beep_log的规范是否可以用以下内容指定:

 @spec beep_log(none()) :: beep()

1 个答案:

答案 0 :(得分:6)

如果没有定义两个函数都将返回的新数据类型,则无法做到这一点。您可以在docs for the GenServer module中查看此模式的示例,其中start/3类型由start_link/3defmodule Car do @type beep_return() :: String.t @spec beep(none()) :: beep_return() def beep do "beep" end @spec beep_log(none()) :: beep_return() def beep_log do IO.puts "beep log" beep end end 定义并共享。

在你的情况下,这样的事情会起作用:

itertools.islice()