我想在应用程序中存储坐标。坐标由三个浮点组成:x,y和z。定义一个类型将它们组合在一起,还是定义一个记录,这是一个更好的实践?Erlang用户指南说,它们都在编译过程中被转换为元组表达式。一种方法比另一种方法有优势吗?
-type coordinate() :: {X, Y, Z}. -record(coordinate, {x, y, z}).
eagi6jfj1#
我猜您的意思是record s与tuple s,因为-type不存在于编译代码中,它只用于类型检查(您也可以为记录创建类型)。记录是以记录名为前缀的元组:
record
tuple
-type
-record(coordinate, {x,y,z}). #coordinate{1,2,3} == {coordinate,1,2,3}.
这个新元素的开销最小,但可能会对性能产生一些影响(它会使记录大一个字),但是如果您考虑进行这种优化,可以通过直接使用组件或用C/C++重写关键路径来进一步优化它。另一方面,使用记录大大提高了易读性,并允许您使用默认初始化器。我建议对任何有意义的结构化值使用记录作为顶级元组,对所有值使用类型:
-record(coordinate, { x = 0 :: number(), y = 0 :: number(), z = 0 :: number() }). -type coordinate() :: #coordinate{}. -opaque stack(ElementType) :: {Elements :: [ElementType], Size :: non_neg_integer()}. -record(position, { coord = #coordinate{} :: coordinate(), stack = {[], 0} :: stack(term()), id = 0 :: non_neg_integer() }). -type position() :: #position{stack :: stack(coordinate())}. -export_type([coordinate/0, stack/1, position/0]).
1条答案
按热度按时间eagi6jfj1#
我猜您的意思是
record
s与tuple
s,因为-type
不存在于编译代码中,它只用于类型检查(您也可以为记录创建类型)。记录是以记录名为前缀的元组:
这个新元素的开销最小,但可能会对性能产生一些影响(它会使记录大一个字),但是如果您考虑进行这种优化,可以通过直接使用组件或用C/C++重写关键路径来进一步优化它。
另一方面,使用记录大大提高了易读性,并允许您使用默认初始化器。
我建议对任何有意义的结构化值使用记录作为顶级元组,对所有值使用类型: