如何将对象分配给 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"
。我试过将 ref
和 ptr
放在字符串的前后,试图在文档中找到一些示例,但失败了。
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"
此代码无法编译:
var s: ref string = nil
s = ref "hi"
echo s
错误是(2, 9) Error: type expected, but got: "hi"
。我试过将 ref
和 ptr
放在字符串的前后,试图在文档中找到一些示例,但失败了。
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"