如何将对象分配给 ref

How to assign object to ref

此代码无法编译:

var s: ref string = nil
s = ref "hi"
echo s

错误是(2, 9) Error: type expected, but got: "hi"。我试过将 refptr 放在字符串的前后,试图在文档中找到一些示例,但失败了。

var s: ref string
new(s)
s[] = "hi"
echo s[]
  • 声明
  • 分配新对象
  • 分配给取消引用的字符串
  • 以解引用形式回显最终字符串

注意需要echo s[],因为ref string没有实现$运算符,无法通过echo转成字符串。

不完全确定你为什么要这样做。但首先您需要创建您的 ref 类型,然后将值分配给一个字符串。像这样:

var s: ref string = nil
echo s.repr
new s
s[] = "hi"
echo s[]
echo s.repr

将输出如下内容:

nil
hi
ref 0x7f7d4bbcf050 --> 0x7f7d4bbd2090"hi"

但正如我所说,不确定您为什么想要这个。字符串已经是引用类型。只要将它们作为可变的传递给过程,您就可以修改基础数据:

var s: string = ""
s = "hi"
echo s
echo s.repr

proc test(x: string) =
  echo x.repr

proc testM(x: var string) =
  echo x.repr
  x[1] = 'o'
  
test s
testM s

echo s
echo s.repr

将输出如下内容:

hi
0x7f5fc2807060"hi"
0x7f5fc2807060"hi"
0x7f5fc2807060"hi"
ho
0x7f5fc2807060"ho"