语法解释:'let secretbox :: Key(ref mut kb)= k;'

Dan*_*ley 2 rust

我一直在使用氧化钠来创建各种"密码管理器".文档中的这个特殊例子令我难过:

use sodiumoxide::crypto::secretbox;
use sodiumoxide::crypto::pwhash;

let passwd = b"Correct Horse Battery Staple";
let salt = pwhash::gen_salt();
let mut k = secretbox::Key([0; secretbox::KEYBYTES]);
{
    let secretbox::Key(ref mut kb) = k;
    pwhash::derive_key(kb, passwd, &salt,
                       pwhash::OPSLIMIT_INTERACTIVE,
                       pwhash::MEMLIMIT_INTERACTIVE).unwrap();
}
Run Code Online (Sandbox Code Playgroud)

特别是这条线:

let secretbox::Key(ref mut kb) = k;
Run Code Online (Sandbox Code Playgroud)

我不太明白这个或它正在做什么的语法.如果有人能向我解释这一行中发生的事情真是太棒了.谢谢.

Fra*_*gné 5

secretbox::Key(ref mut kb)是一种模式.secretbox::Key是一个元组结构,因此它的字段是未命名的,并用括号括起来.ref mut kb绑定kb到结构中唯一字段的可变引用.

您也可以这样做:

let kb = &mut k.0;
Run Code Online (Sandbox Code Playgroud)