- 教程
- 概述
- 环境
- Basic 语法
- 数据类型
- 变量
- 运算符
- 模式匹配( Pattern Matching)
- 决策( Decision Making)
- Strings( Strings)
- Char Lists( Char Lists)
- 列表和元组( Lists and Tuples)
- 关键字列表( Keyword Lists)
- Maps
- 模块( Modules)
- 别名( Aliases)
- 功能( Functions)
- 递归
- 循环
- Enumerables( Enumerables)
- Streams( Streams)
- Structs( Structs)
- 协议 Protocols
- File I/O
- 进程( Processes)
- Sigils( Sigils)
- 理解( Comprehensions)
- Typespecs( Typespecs)
- 行为( Behaviours)
- 错误处理( Errors Handling)
- Macros( Macros)
- (库)Libraries
- 有用的资源
- 讨论
- Show 例子
- Show 例子
- Show 例子
- Show 例子
- Show 例子
- if statement
- if..else statement
- unless statement
- unless..else statement
- cond
- case
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
Typespecs( Typespecs)
Elixir是一种动态类型语言,因此Elixir中的所有类型都是由运行时推断的。 尽管如此,Elixir还带有typespecs,这是一种用于declaring custom data types and declaring typed function signatures (specifications) 。
Function Specifications(specs)
默认情况下,Elixir提供了一些基本类型,例如integer或pid,以及复杂类型:例如, round函数将float转换为其最接近的整数,将一个数字作为参数(整数或浮点数)和返回一个整数。 在相关documentation ,圆形类型签名写为 -
round(number) :: integer
上面的描述暗示左边的函数作为参数在括号中指定,并返回::,即Integer右边的内容。 函数规范使用@spec指令编写,放在函数定义之前。 圆函数可写为 -
@spec round(number) :: integer
def round(number), do: # Function implementation
...
Typespecs也支持复杂类型,例如,如果要返回整数列表,则可以使用[Integer]
自定义类型
虽然Elixir提供了许多有用的内置类型,但在适当的时候定义自定义类型很方便。 这可以通过@type指令定义模块来完成。 让我们考虑一个例子来理解相同的 -
defmodule FunnyCalculator do
@type number_with_joke :: {number, String.t}
@spec add(number, number) :: number_with_joke
def add(x, y), do: {x + y, "You need a calculator to do that?"}
@spec multiply(number, number) :: number_with_joke
def multiply(x, y), do: {x * y, "It is like addition on steroids."}
end
{result, comment} = FunnyCalculator.add(10, 20)
IO.puts(result)
IO.puts(comment)
运行上述程序时,会产生以下结果 -
30
You need a calculator to do that?
NOTE - 通过@type定义的自定义类型将被导出,并在定义它们的模块之外可用。如果要将自定义类型保持为私有,则可以使用@typep指令而不是@type 。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论