我正在学习本教程,但无法理解以下代码:
mail_account.serialize(&mut &mut account.data.borrow_mut()[..])?;
Run Code Online (Sandbox Code Playgroud)
其中mail_account是一个结构体,是从Borsh Serialize.serialize()派生的方法。
另一件需要注意的事情是,它account是来自 solana_program 箱的AccountInfodata结构,其类型为:Rc<RefCell<&'a mut [u8]>>
作者对代码的解释如下:
您可能会注意到这个棘手的
&mut &mut account.data.borrow_mut()[..]表达方式。该serialize()方法将对可变切片的引用作为u8参数,该borrow_mut()方法返回一个RefMut. 我们无法传递RefMut给需要切片的方法,因此我们采用一个可变切片,其中RefMut返回一个可变切片u8
我所理解的是,我们想要将当前mail_account结构写入account.data,这就是我们借用对 的可变引用的原因account.data。我不明白的是为什么添加 很重要[..]?serialize()我认为这与期待切片有关。
我也无法理解添加&mut &mut到如何account.data.borrow_mut()[..]创建u8. 这是如何转换成的u8?对我来说,它似乎只是向原始引用添加了额外的可变引用。(类型如何从 变为RefMut?&[u32])
事先道歉,因为这似乎是非常基本的.
我有我的链表文件linkedList.c,我想将它包含在我的新c文件中,这样我就不必再对整个链表进行编码了.在Java中,我只需将它放在同一个文件夹中,然后我就可以在新文件中创建类LinkedList的对象,但是C似乎不会以这种方式工作.如果我尝试使用
#include "linkedLIst.c"
Run Code Online (Sandbox Code Playgroud)
在我的新文件的开头然后我收到错误,因为main已经与我的布尔变量一起被定义了两次.我究竟该如何解决这个问题?