我一直在使用氧化钠来创建一个密码管理器'各种各样的。 文档中的这个特殊例子令我难过:
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();
}
特别是这一行:
let secretbox::Key(ref mut kb) = k;
我不太了解这个或它正在做什么的语法。如果有人能够向我解释这一行中发生了什么,那就太棒了。感谢。
答案 0 :(得分:5)
secretbox::Key(ref mut kb)
是pattern。 secretbox::Key
是tuple struct,因此其字段未命名,并用括号括起来。 ref mut kb
将kb
绑定到结构中唯一字段的可变引用。
您也可以这样做:
let kb = &mut k.0;