JSRUN 用代码说话

引用和指针类型

编辑教程

引用和指针类型

引用(类似与其他编程语言中的指针)是一种介绍多对一关系的一种方法。这意味着不同的引用可以指向和修改相同的内存单元。

在nim中分为追踪引用和非追踪引用(反追踪)。非追踪引用也叫做指针。跟踪引用指向一个垃圾收集堆对象,反跟踪指向手动分配的对象或内存中其他地方的对象。因此反跟踪引用是不安全的。然而对于某些低级操作(访问硬件)反跟踪引用是不可避免的。

追踪引用用ref关键字声明,反追踪引用用ptr关键字声明。

空[]下标符号可以用于解参考一个引用,引用指向的检索项的意义。.(访问一个元组或者对象域操作)和[](数组/字符串/序列索引操作)操作符执行隐式解引用操作对于引用类型:

type
  Node = ref NodeObj
  NodeObj = object
    le, ri: Node
    data: int
var
  n: Node
new(n)
n.data = 9
# no need to write n[].data; in fact n[].data is highly discouraged!
不推荐写n[].data

为了创建一个新的追踪对象,内置函数new()必须被使用。为了处理反追踪内存函数alloc(),dealloc(),realloc()函数可以使用。系统模块的文档包含更多的信息。

如果一个引用指向空,它的值为nil.


过程类型

一个程序类型是一个(有些抽象)程序的指针。空值是一个允许的程序类型变量的值。Nim用程序类型来实现功能编程技术。

Example:

proc echoItem(x: int) = echo(x)

proc forEach(action: proc (x: int)) =
  const
    data = [2, 3, 5, 7, 11]
  for d in items(data):
    action(d)

forEach(echoItem)

关于程序类型的一个微妙的问题是:程序的调用约定会影响类型的兼容性。只有具有相同调用约定的程序才具有兼容性。手册中列出了调用约定的不同。

JSRUN闪电教程系统是国内最先开创的教程维护系统, 所有工程师都可以参与共同维护的闪电教程,让知识的积累变得统一完整、自成体系。 大家可以一起参与进共编,让零散的知识点帮助更多的人。
X
支付宝
9.99
无法付款,请点击这里
金额: 0
备注:
转账时请填写正确的金额和备注信息,到账由人工处理,可能需要较长时间
如有疑问请联系QQ:565830900
正在生成二维码, 此过程可能需要15秒钟