W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
@type
指令.假設(shè)我們有一個(gè)LousyCalculator
模塊,它能進(jìn)行普通的算術(shù)操作(求和,乘積等等),但是,它返回的不是一個(gè)數(shù),而是一個(gè)元組,第一個(gè)元素是計(jì)算結(jié)果,第二個(gè)元素是隨機(jī)的評(píng)論.
defmodule LousyCalculator do
@spec add(number, number) :: {number, String.t}
def add(x, y), do: {x + y, "You need a calculator to do that?!"}
@spec multiply(number, number) :: {number, String.t}
def multiply(x, y), do: {x * y, "Jeez, come on!"}
end
如你所見,元組是復(fù)合類型,每個(gè)元組是通過其中的類型來區(qū)分的.想知道為什么String.t
不寫作string
,請(qǐng)查看類型規(guī)格中的標(biāo)記文檔.
我們可以這樣定義函數(shù)規(guī)格,但是一直重復(fù){number, String.t}
很煩人.我們可以使用@type
指令來聲明我們自定義的類型.
defmodule LousyCalculator do
@typedoc """
Just a number followed by a string.
"""
@type number_with_remark :: {number, String.t}
@spec add(number, number) :: number_with_remark
def add(x, y), do: {x + y, "You need a calculator to do that?"}
@spec multiply(number, number) :: number_with_remark
def multiply(x, y), do: {x * y, "It is like addition on steroids."}
end
@typedoc
指令類似于@doc
和@moudledoc
指令,用于注釋自定義類型.
通過@type
定義的類型可以被導(dǎo)出并在定義模塊之外使用:
defmodule QuietCalculator do
@spec add(number, number) :: number
def add(x, y), do: make_quiet(LousyCalculator.add(x, y))
@spec make_quiet(LousyCalculator.number_with_remark) :: number
defp make_quiet({num, _remark}), do: num
end
如果你想將自定義類型設(shè)為私有的,可以用@typep
替代@type
.
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: