假设我有一个具有以下签名的函数:
fn validate(samples: &[(&str, &[Token])])
Run Code Online (Sandbox Code Playgroud)
Token自定义枚举在哪里。我希望能够写一些类似的东西:
let samples = vec![
("a string", &[Token::PLUS, Token::MINUS, Token::PLUS]),
("another string", &[Token::MUL]),
];
validate(&samples);
Run Code Online (Sandbox Code Playgroud)
但是这样的代码会产生类型不匹配的编译错误:
error: mismatched types:
expected `&[(&str, &[Token])]`,
found `&collections::vec::Vec<(&str, &[Token; 3])>`
Run Code Online (Sandbox Code Playgroud)
是否有可能以某种方式将具有静态长度()的版本转换&[Token; 3]为静态切片(&[Token])?换句话说,我希望能够以与我指定类似的方式指定静态切片&str,作为某种“切片文字”。
或者我做的完全错误?
编辑:简而言之,我想找到一种语法来创建具有静态生命周期(或至少与向量samples的生命周期一样长的生命周期)的数组,并返回它的切片。
类似于字符串的工作方式,只需输入“a string”即可给我 type 的引用&'static str。
编辑2:@Pablo 的答案为我的特定问题提供了很好的解决方案,尽管这并不完全是我一开始的意思。
我想我所想到的确切的事情可能是不可能的,所以我现在只会接受这个,除非出现更符合我最初想法的东西。
我有一个迭代器iter; 是否可以将其转换为迭代每个第N个元素的迭代器?有点像iter.skip_each(n - 1)?
我想通过 PHP 从我的服务器向手机发送消息。这是我的代码:
$apiKey = "AIxxxxxxxxxxxxxxxxxxxx";
$registrationIDs = array( $c2dmId );
$url = "https://android.googleapis.com/gcm/send";
$headers = array(
'Authorization: key='.$apiKey,
'Content-Type: application/json'
);
$fields = array(
'collapse_key' => $collapseKey,
'data' => array(
"type" => $msgType,
"extra" => $msgExtra,
"uuid" => $uuid,
"user_id" => $userId),
'registration_ids' => $registrationIDs,
);
print (json_encode($fields));
echo "<br/>";
$ch = curl_init();
curl_setopt( $ch, CURLOPT_URL, $url );
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch, CURLOPT_POST, true );
curl_setopt( $ch, CURLOPT_POSTFIELDS, …Run Code Online (Sandbox Code Playgroud)